2015-07-21 245 views
1

我需要保存用戶上次訪問的網頁。 Evevery可以正常使用我的Galaxy S4(5.0.1)和Chrome瀏覽器。Android瀏覽器歷史記錄URI?

但是,在某些手機上我沒有得到任何結果或混合結果。從我收集的信息來看,最大的問題是瀏覽器URI本身。一些手機使用Chrome作爲他們的主要瀏覽器,一些使用其他的手機。

我有三個來源: content://com.android.chrome.browser/bookmarks content://com.sec.android.app.sbrowser/bookmarks Browser.BOOKMARKS_URI

所以現在我的工作是這樣的:

@Override 
    public void onChange(boolean selfChange) { 
     super.onChange(selfChange); 
     h.removeCallbacks(this); 
     h.postDelayed(this, 500); 
    } 

    public void run() { 

     String[] proj = new String[] { Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL,Browser.BookmarkColumns.DATE }; 
     String selection = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history, 1 = bookmark 
     Cursor mCur = null; 
     try { 
      mCur = contentResolver.query(getURI(), proj, selection, null, null); 
      if(mCur != null && mCur.moveToLast()){ 

       String title = ""; 
       String url = ""; 

       title = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.TITLE)); 
       url = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.URL)); 

       ... 


      } 

     } catch (Exception e){ 

       ... 

     } finally { 
      if(mCur != null) 
       mCur.close(); 
     } 
    } 

    private Uri getURI(){ 
     Uri uri = Uri.parse("content://com.android.chrome.browser/bookmarks"); 
     return uri; 
    } 
  1. 磨是提供正確的URI的最好方法? onChange在瀏覽器歷史記錄上作爲內容觀察者觸發。

所以用戶可以在Chrome上瀏覽互聯網,我仍然可以從ASOP瀏覽器獲得歷史結果。 當我直接觀察chrome時,在某些電話上,我得到了failed to find provider info,因爲沒有安裝chrome。

  1. 什麼是搜索瀏覽器歷史的其他「流行」源代碼?我寧願儘可能地做到這一點。

回答

1

試試吧:((在android> 4.0和5或6.0中完美運行);無論如何,在FOREACH中創建一個contentObserver數組並添加一個列表併爲每個URI記錄一個不同的URI。

在服務機器人

(背景):

HistoryObserver hObserver; 

public void onCreate() { 
    hObserver = new HistoryObserver(new Handler(), this); 
    getApplicationContext().getContentResolver().registerContentObserver(Uri.parse("content://com.android.chrome.browser/history"), true, hObserver); 
} 

類historicObserver:

import java.text.SimpleDateFormat; 
import java.util.Calendar; 

import android.annotation.SuppressLint; 
import android.content.Context; 
import android.database.ContentObserver; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Handler; 
import android.provider.Browser; 
import android.util.Log; 

public class HistoryObserver extends ContentObserver { 

public final String TAG = "HistoryObserver"; 

Context context; 

public HistoryObserver(Handler handler, Context c) { 
    super(handler); 
    Log.d(TAG, "Creating new HistoryObserver"); 
    context = c; 
} 

public HistoryObserver(Context c) { 
    super(null); 
    Log.d(TAG, "Creating a new HistoryObserver without a Handler"); 
    context = c; 
} 

@Override 
public boolean deliverSelfNotifications() { 
    Log.d(TAG, "delivering self notifications"); 
    return true; 
} 

@Override 
public void onChange(boolean selfChange) { 
    super.onChange(selfChange); 
    Log.d(TAG, "onChange without uri: " + selfChange); 
    // onChange(selfChange, null); 
} 

@SuppressLint("NewApi") 
public void onChange(boolean selfChange, Uri uri) { 
    super.onChange(selfChange, uri); 


    Log.d(TAG, "onChange: " + selfChange + "\t " + uri.toString()); 

    String[] proj = new String[] { Browser.BookmarkColumns.TITLE, 
      Browser.BookmarkColumns.URL, Browser.BookmarkColumns.DATE }; 
    String selection = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = 
                    // history, 
                    // 1 = 
                    // bookmark 

    try { 
     Thread.sleep(1500); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    Cursor mCursor = context.getContentResolver().query(Browser.BOOKMARKS_URI, 
      proj, selection, null, null); 
    // this.startManagingCursor(mCursor); 
    mCursor.moveToFirst(); 
    int count = mCursor.getColumnCount(); 
    String COUNT = String.valueOf(count); 
    Log.e("Browser sayac", COUNT); 

    String title = ""; 
    String url = ""; 
    String date = ""; 
    if (mCursor.moveToFirst() && mCursor.getCount() > 0) { 

     while (mCursor.isAfterLast() == false) { 

      title = mCursor.getString(mCursor 
        .getColumnIndex(Browser.BookmarkColumns.TITLE)); 
      url = mCursor.getString(mCursor 
        .getColumnIndex(Browser.BookmarkColumns.URL)); 
      date = mCursor.getString(mCursor 
        .getColumnIndex(Browser.BookmarkColumns.DATE)); 
      Long timestamp = Long.parseLong(date); 

      SimpleDateFormat dateFormat = new SimpleDateFormat(
        "dd/MM/yyyy/HH:mm"); 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(timestamp); 
      String finaldate = dateFormat.format(calendar.getTime()); 
      String smsDate = finaldate.toString(); 

      // Log.e("DTE", date); 
      Log.e("URL", title); 

      Log.e("TARIH", smsDate); 
      mCursor.moveToNext(); 
     } 
    } 
} 

}

相關問題