Android浏览器历史记录URI?

时间:2015-07-21 10:31:57

标签: android uri android-contentprovider android-browser

我需要按用户保存上次访问过的网页。 使用Chrome浏览器,我的Galaxy S4(5.0.1)可以正常使用Evething。

然而,在某些手机上我没有得到任何结果或者结果非常复杂。从我收集的内容来看,最大的问题是浏览器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. Whet是提供正确URI的最佳方式吗? onChange作为浏览器历史记录的内容观察者触发。
  2. 因此用户可以在Chrome上浏览互联网,我仍然可以从ASOP浏览器获取历史记录结果。 当我直接观察镀铬时,在某些手机上我得到failed to find provider info,因为没有安装镀铬。

    1. 其他什么"受欢迎"来源搜索浏览器历史记录?我希望尽可能使其成为防弹。

1 个答案:

答案 0 :(得分:3)

尝试:(在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);
 }

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

}