2010-04-05 43 views
31

Tôi muốn đọc lịch sử trình duyệt trong điện thoại Android.Android đọc lịch sử trình duyệt

Tôi đã thực hiện một số đọc tài liệu, sau đó tôi biết rằng chúng tôi có thể đọc lịch sử trình duyệt của lớp android.provider.Browser. Nó có:

final static Cursor 
getAllVisitedUrls(ContentResolver cr) 

... phương thức trả về Cursor.

Tôi có thể nhận trợ giúp để xử lý Con trỏ hoặc bất kỳ mã ví dụ nào để tải lịch sử trình duyệt không?

Trả lời

29

Không thực sự là câu trả lời nhưng tôi có thể cho bạn biết những gì tôi đã làm.

Lần đầu tiên tôi sao chép browser repo và cố gắng tái tạo cách chúng có được lịch sử. Và tôi bắt đầu nhận được:

Permission từ chối: đọc com.android.browser.BrowserProvider

Vì vậy, tôi nói thêm:

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" /> 

Nhưng nó vẫn là đem lại cho tôi những lỗi tương tự . Tôi google nó và tôi thấy điều này Accessing Data With Android Cursors.

Hy vọng điều đó sẽ hữu ích.

+1

Việc cho phép phải là: '' Nó hoạt động sau đó. – Firebrandt

+0

@Firebrandt: Tôi vừa sửa nó. Cảm ơn. – Macarse

+0

Phương thức này có yêu cầu quyền truy cập root hoặc chỉ một quyền đó không? – ethanpil

9

Đối với Lollipop hoặc sớm hơn

tôi có thể để có được lịch sử bằng cách sử dụng đoạn mã sau:

Cursor mCur = activity.managedQuery(Browser.BOOKMARKS_URI, 
        Browser.HISTORY_PROJECTION, null, null, null); 
      if (mCur.moveToFirst()) { 
       while (mCur.isAfterLast() == false) { 
        Log.v("titleIdx", mCur 
          .getString(Browser.HISTORY_PROJECTION_TITLE_INDEX)); 
        Log.v("urlIdx", mCur 
          .getString(Browser.HISTORY_PROJECTION_URL_INDEX)); 
        mCur.moveToNext(); 
       } 
      } 
+0

cách lấy thời gian tức là khi chúng tôi mở trang web thông tin – Venkat

+2

Log.v ("urlIdx", mCur.getString (Browser.HISTORY_PROJECTION_DATE_INDEX)); thử thứ này đi. và để biết thêm thông tin, vui lòng truy cập http://developer.android.com/reference/android/provider/Browser.html –

+1

Điều này sẽ không hoạt động trong Marshmallow nữa: https://developer.android.com/about/versions/marshmallow/ android-6.0-changes.html # behavior-bookmark-browser – user1406716

18

managedQuery đã bị phản đối nên sử dụng getContentResolver thay vào đó, sử dụng đoạn mã sau:

String[] proj = new String[] { Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL }; 
String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history, 1 = bookmark 
Cursor mCur = getContentResolver().query(Browser.BOOKMARKS_URI, proj, sel, null, null); 
mCur.moveToFirst(); 
@SuppressWarnings("unused") 
String title = ""; 
@SuppressWarnings("unused") 
String url = ""; 
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)); 
     // Do something with title and url 
     mCur.moveToNext(); 
    } 
} 

Đồng thời thêm quyền bằng cách sử dụng

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" /> 
+0

câu trả lời này hoạt động! Tôi cũng đã làm ví dụ dựa trên câu trả lời này https://github.com/shanwu/shanwu_coding_base/tree/bookmark_record_example – shanwu

+1

[Hầu hết mọi thứ liên quan đến Dấu trang đã bị xóa trong API cấp 23 (Android 6.0+)] (https: // nhà phát triển .android.com/about/versions/marshmallow/android-6.0-changes.html # behavior-bookmark-browser) – Aashish

3
public ArrayList<HistoryEntry> getBrowserHistory() { 

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

    ArrayList<HistoryEntry> list = new ArrayList<HistoryEntry>(); 

    String[] proj = new String[] { Browser.BookmarkColumns.TITLE, 
      Browser.BookmarkColumns.URL }; 
    String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history, 
                  // 1 = bookmark 
    Cursor mCur = getContentResolver().query(Browser.BOOKMARKS_URI, proj, 
      sel, null, null); 
    mCur.moveToFirst(); 

    if (mCur.moveToFirst() && mCur.getCount() > 0) { 
     boolean cont = true; 
     while (mCur.isAfterLast() == false && cont) { 
      HistoryEntry entry = new HistoryEntry(); 

      title = mCur.getString(mCur 
        .getColumnIndex(Browser.BookmarkColumns.TITLE)); 
      url = mCur.getString(mCur 
        .getColumnIndex(Browser.BookmarkColumns.URL)); 
      // Do something with title and url 
      entry.setTitle(title); 
          entry.setUrl(url); 
          list.add(entry); 
      Log.d("TAG", "title " + title); 
      mCur.moveToNext(); 
     } 
    } 

    mCur.close(); 

    return list; 
} 
+0

[Hầu hết mọi thứ liên quan đến Dấu trang đã bị xóa trong API Cấp 23 (Android 6.0+)] (https: // nhà phát triển .android.com/about/versions/marshmallow/android-6.0-changes.html # hành vi-dấu trang-trình duyệt) – Aashish

3

bài này là một chút ít tuổi, nhưng đây là một giải pháp dễ dàng để lấy dữ liệu liên quan đến BookmarkSearch cung cấp nội dung trong Android:

Sử dụng lib này: https://github.com/EverythingMe/easy-content-providers

Nhận tất cả dấu trang:

BrowserProvider browserProvider = new BrowserProvider(context); 
List<Bookmark> bookmarks = browserProvider.getBookmarks().getList(); 

Mỗi Bookmark có tất cả các lĩnh vực, vì vậy bạn có thể nhận được bất kỳ thông tin bạn cần: tiêu đề, url, thăm viếng, ...

Nhận tất cả Tìm kiếm lịch sử:

List<Search> searches = browserProvider.getSearches().getList(); 

Nó hoạt động với danh sách hoặc con trỏ và có một ứng dụng mẫu để xem nó trông như thế nào và hoạt động.

Trong thực tế, có hỗ trợ cho tất cả các nhà cung cấp nội dung Android như: Danh bạ, tin nhắn SMS, cuộc gọi, ... doc đầy đủ với tất cả các lựa chọn: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers

Hy vọng nó sẽ giúp :)

Các vấn đề liên quan