1

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」に変更しようとしましたが、うまくいきませんでした。

助言がありますか?

4

1 に答える 1

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_URIUri.parse("content://com.android.chrome.browser/bookmarks")に置き換えるだけです。

getContentResolver().registerContentObserver(...)getContentResolver().query(...)の両方で置き換える必要があることに注意してください。

于 2013-10-24T13:13:20.207 に答える