2013-05-26 2 views
3

Я пишу приложение, которое должно помочь мне получить всю информацию об истории браузера, так что я написал простой код:Android - получить доступ к истории браузера

public class WebHistory { 
    private Context context; 
    private Cursor cr; 
    public StringBuilder sb; 
    public WebHistory(Context c){ 
     this.context = c; 
    } 

    public void takeHistory(){ 
     cr = context.getContentResolver().query(Browser.BOOKMARKS_URI,Browser.HISTORY_PROJECTION, null, null, null); 
     cr.moveToFirst(); 
     String title = ""; 
     String date = ""; 
     String visits = ""; 
     String url = ""; 
     String info = ""; 
     if(cr.moveToFirst() && cr.getCount() > 0){ 
      while(cr.isAfterLast() == false){ 
       title = cr.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX); 
       date = cr.getString(Browser.HISTORY_PROJECTION_DATE_INDEX); 
       url = cr.getString(Browser.HISTORY_PROJECTION_URL_INDEX); 
       visits = cr.getString(Browser.HISTORY_PROJECTION_VISITS_INDEX); 
       info = title + " date: " + date + " url: " + url + " visits" + visits + "\n"; 
       Toast.makeText(context, info, Toast.LENGTH_LONG).show(); 
       cr.moveToNext(); 
      } 
     } 


    } 
} 

Метод takeHistory() помогает мне принимать некоторые данные об истории браузера, но мне нужно больше функциональных возможностей, как:

- HISTORY_PROJECTION_DATE_INDEX дает мой только одну дату, и мне нужны все даты (а также часов), когда пользователь посетил эту страницу

- Browser.HISTORY_PROJECTION_VISITS_INDEX возвращает все посещения, которые я сделано, но Я хочу разделить эту сумму на gruops посещений, которые имели место на указанной отметке времени

Может кто-нибудь предложить, как я могу отбросить эту информацию или порекомендовать учебник, в котором я могу найти необходимую информацию? Заранее благодарю вас за ваш совет.

ответ

0

Вам нужно будет запустить наблюдатель контента и записать все изменения, которые происходят. Я сделал аналогичный код. Начните контент-наблюдатель и в onChange(); функцию, прочитайте историю, которая изменилась с момента последнего ее чтения (для этого вы можете использовать общие настройки). И вам нужно сделать все это на службе

public void onChange(boolean selfChange) { 
     super.onChange(selfChange); 
     /** 
     * Get SharedPreferneces of the user 
     */ 
     SharedPreferences pref= myContext.getSharedPreferences("com.tpf.sbrowser", 
       Context.MODE_PRIVATE); 
     long wherelong = pref.getLong("Date", 0); 
     DatabaseManager db=new DatabaseManager(myContext,1); 
     String[] proj = new String[] { Browser.BookmarkColumns.TITLE, 
       Browser.BookmarkColumns.URL, BookmarkColumns.DATE,}; 
     String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; 
     Cursor mCur = myContext.getContentResolver().query(
       Browser.BOOKMARKS_URI, proj, sel, null, null); 
     Log.d("onChange", "cursorCount"+mCur.getCount()); 
     mCur.moveToFirst(); 
     String title = ""; 
     String url = ""; 
     long lastVisitedDate=0; 
//You will need to create a database manager to manage your database and use its helper functions 
     DbMessage msg = new DbMessage(lastVisitedDate,url, title); 
     /** 
     * Start reading the user history and dump into database 
     */ 
     if(mCur.moveToFirst() && mCur.getCount() > 0) { 
       while (mCur.isAfterLast() == false) { 
        title =mCur.getString(0); 
        url = mCur.getString(1); 
        lastVisitedDate =mCur.getLong(2); 
        if ((lastVisitedDate>wherelong) && (!title.equals(url))) { 
         msg.set(lastVisitedDate, url, title); 
         db.InsertWithoutEnd(msg); 
         pref.edit().putBoolean("BrowserHistoryRead", true).commit(); 
         pref.edit().putLong("Date", lastVisitedDate).commit(); 
         myContext.updateTime(wherelong,lastVisitedDate); 
         wherelong=lastVisitedDate; 
        } 
        mCur.moveToNext(); 
       } 
      } 
     mCur.close(); 
    } 
} 


/** 
* (non-Javadoc) 
* @see android.app.Service#onDestroy() 
*/ 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    getApplication().getContentResolver().unregisterContentObserver(
      observer); 
    Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show(); 
    state = 0; 
} 
} 
+0

Спасибо за образец. поскольку вы регистрируете/не регистрируете его в контексте Activity/Service, поэтому вы не будете уведомлены о том, что приложение не запущено. Я ищу способ уведомления, даже когда приложение не работает. пожалуйста, посмотрите: http://stackoverflow.com/q/21542098/513413 спасибо. – Hesam

Смежные вопросы