【问题标题】:Android browser history URI?Android浏览器历史URI?
【发布时间】:2015-10-10 18:18:24
【问题描述】:

我需要保存用户上次访问的网页。 Evething 在我的带有 Chrome 浏览器的 Galaxy S4 (5.0.1) 上运行良好。

但是,在某些手机上,我什么也没得到,或者结果很复杂。从我收集到的信息来看,最大的问题是浏览器 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. 搜索浏览器历史的其他“流行”来源是什么?我更愿意让它尽可能防弹。

【问题讨论】:

    标签: android uri android-contentprovider android-browser


    【解决方案1】:

    试试看:(在 android > 4.0 和 5 或 6.0 中完美运行);不管怎样,在 FOREACH 中创建一个 contentObserver 数组并添加一个列表并为每个数组记录一个不同的 URI。

    在服务android(后台):

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

    类historyObserver:

    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();
            }
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 2013-05-21
      • 2011-02-04
      • 2012-11-14
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      相关资源
      最近更新 更多