2013-09-24 207 views
1

我有一个代码可以在android中检索默认浏览器的历史记录,最近我添加了Chrome浏览器历史记录。但是我有一个问题 - 我只有铬历史。例如。如果没有chrome,我会得到默认的浏览器,如果有chrome,这两种方法都只能获得chrome的历史记录。 我使用此代码 -获取Android中的默认浏览器和Chrome浏览器

String[] mProjection = { 
      Browser.BookmarkColumns.BOOKMARK, 
      BookmarkColumns.CREATED, BookmarkColumns.DATE, 
      BookmarkColumns.TITLE, BookmarkColumns.URL, 
      BookmarkColumns.VISITS, 
      BookmarkColumns._ID }; 
    String mSelectionClause = "DATE > ? "; 
    String[] selectionArgs = {getEpochDate("DefaultBrowser")}; //"1332115200-000" 
    String mSortOrder = "DATE";   
    Cursor cr = getContentResolver().query(Browser.BOOKMARKS_URI, mProjection, mSelectionClause, selectionArgs, mSortOrder);    
    cr.moveToFirst();   
    if (cr.moveToFirst() && cr.getCount() > 0) { 
     while (cr.isLast() == false) {       
      try { 
       if (cr.getString(cr.getColumnIndex("BOOKMARK")).equals("0")) { 
        Log.d("getHistory", cr.getString(cr.getColumnIndex("TITLE"))); 
        mc.writeDataToDB("URL", mc.ConvertFromEpoch(cr.getString(cr.getColumnIndex("DATE"))), cr.getString(cr.getColumnIndex("URL")), cr.getString(cr.getColumnIndex("TITLE")),""); 
       } 
      } catch (Exception e) {      
       e.printStackTrace(); 
      }    
      cr.moveToNext(); 
     } 
     mc.insertPref("HistoryDate", cr.getString(cr.getColumnIndex("DATE"))); 
    } 

    // get google chrome history 

    String[] selectionArgsChrome = {getEpochDate("ChromeBrowser")}; 

    Uri uriCustom = Uri.parse("content://com.android.chrome.browser/bookmarks"); 
    if (getContentResolver().query(uriCustom, mProjection, mSelectionClause, selectionArgsChrome, mSortOrder) !=null){ 
    Cursor mCur = getContentResolver().query(uriCustom, mProjection, mSelectionClause, selectionArgsChrome, mSortOrder); 

    mCur.moveToFirst(); 
    String title = ""; 
    String url = ""; 
    String DATE = ""; 

    if (mCur.moveToFirst() && mCur.getCount() > 0) { 
    boolean cont = true; 
    while (mCur.isAfterLast() == false && cont) { 
      title = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.TITLE)); 
      url = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.URL)); 
      DATE = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.DATE)); 
      mc.writeDataToDB("URL", mc.ConvertFromEpoch(DATE), url, title,""); 
      mCur.moveToNext(); 
    } 
    mc.insertPref("ChromeHistoryDate", cr.getString(cr.getColumnIndex("DATE"))); 
    }} 

我可以得到默认浏览器,然后铬?我确实尝试将“Browser.BOOKMARKS_URI”更改为uri-“content://com.android.browser/bookmarks”,但它没有奏效。

有什么建议吗?

回答

0

我想你正在使用一个ContentObserver。像下面这样:

//Query values: 
static final String[] projection = new String[] { BookmarkColumns.URL, BookmarkColumns.TITLE, BookmarkColumns.VISITS, BookmarkColumns.DATE }; 
static final String selection = Browser.BookmarkColumns.BOOKMARK + " = 0"; 
static final String sortOrder = Browser.BookmarkColumns.DATE; 


private static class BrowserHistoryObserver extends ContentObserver { 
    public BrowserObserver(Handler handler) { 
     super(handler); 
    } 

    @Override 
    public void onChange(boolean selfChange) { 
     onChange(selfChange, null); 
    } 

    @Override 
    public void onChange(boolean selfChange, Uri uri) { 
     super.onChange(selfChange); 

     //Retrieve all the visited URLs: 
     final Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, projection, selection, null, sortOrder); 

     cursor.moveToFirst(); 
     while (!cursor.isAfterLast()) { 
      final String url = cursor.getString(cursor.getColumnIndex(projection[0])); 
      final String title = cursor.getString(cursor.getColumnIndex(projection[1])); 
      //visits = ... (cursor.getColumnIndex(projection[2])) 
      //date = ... (cursor.getColumnIndex(projection[3])) 

      Log.d(TAG, title + " : " + url + "\n"); 

      cursor.moveToNext(); 
     } 

     //Close the cursor: 
     cursor.close(); 
    } 
} 

你注册/喜欢的东西注销它:

browserHistoryObserver = new BrowserHistoryObserver(new Handler()); 
getContentResolver().registerContentObserver(Browser.BOOKMARKS_URI, true, browserObserver); 

... 

getContentResolver().unregisterContentObserver(browserHistoryObserver); 

上面的代码,当然,适用于默认Android浏览器(事实上我一直使用Browser.BOOKMARKS_URI)。如果您想让Google Chrome工作,只需将Browser.BOOKMARKS_URI替换为Uri.parse(“content://com.android.chrome.browser/bookmarks”)

注意,你将不得不更换其两个getContentResolver()。registerContentObserver(...)getContentResolver()查询(...)