2010-04-05 18 views
31

Chcę przeczytać historię przeglądarki w telefonie z Androidem.Historia odczytu przeglądarki Androida

Zrobiłem czytanie niektórych dokumentów, potem dowiedziałem się, że możemy czytać historię przeglądarki przez klasę android.provider.Browser. Ma:

final static Cursor 
getAllVisitedUrls(ContentResolver cr) 

... metoda, która zwraca Cursor.

Czy mogę uzyskać pomoc w obsłudze programu Cursor lub dowolnego przykładowego kodu, aby pobrać historię przeglądarki?

Odpowiedz

29

Naprawdę nie jest to odpowiedź, ale mogę powiedzieć, co zrobiłem.

Najpierw sklonuj browser repo i spróbuj odtworzyć historię. I zacząłem się:

Permission Denial: czytanie com.android.browser.BrowserProvider

więc dodałem:

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

Ale to wciąż daje mi ten sam błąd . I google to i znalazłem to Accessing Data With Android Cursors.

Mam nadzieję, że to pomaga.

+1

Pozwolenie powinno być: '' Działa wtedy. – Firebrandt

+0

@Firebrandt: Właśnie to naprawiłem. Dzięki. – Macarse

+0

Czy ta metoda wymaga uprawnień administratora lub tylko jednego uprawnienia? – ethanpil

9

Dla Lollipop lub wcześniej

jestem w stanie dostać historię za pomocą następującego kodu:

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

jak zdobyć czas, np. Kiedy otwieramy witrynę informacje – Venkat

+2

Log.v ("urlIdx", mCur.getString (Browser.HISTORY_PROJECTION_DATE_INDEX)); wypróbuj to. i dla dalszych informacji odwiedź http://developer.android.com/reference/android/provider/Browser.html –

+1

To nie będzie działać w Marshmallow: https://developer.android.com/about/versions/marshmallow/ android-6.0-changes.html # behaviour-bookmark-browser – user1406716

18

managedQuery została zaniechana więc używać getContentResolver zamiast użyć następującego kodu:

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

Dodaj również uprawnienia przy użyciu

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

ta odpowiedź działa! Podałem też przykład oparty na tej odpowiedzi: https://github.com/shanwu/shanwu_coding_base/tree/bookmark_record_przykład – shanwu

+1

[Większość rzeczy związanych z zakładkami usunięto na poziomie API 23 (Android 6.0+)] (https: // programista .android.com/about/versions/marshmallow/android-6.0-changes.html # behaviour-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

[Większość rzeczy związanych z zakładkami została usunięta na poziomie API 23 (Android 6.0+)] (https: // developer .android.com/about/versions/marshmallow/android-6.0-changes.html # behaviour-bookmark-browser) – Aashish

3

Ten post jest trochę stary, ale tu jest inny proste rozwiązanie dla uzyskania danych dotyczących Bookmark i Search dostawców treści w Androidzie:

Użyj tego lib: https://github.com/EverythingMe/easy-content-providers

Pobierz wszystko Zakładki:

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

Każdy Zakładka posiada wszystkie pola, dzięki czemu można uzyskać wszelkie potrzebne informacje: tytuł, url, wizyt ...

uzyskać wszystkie Search historia:

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

działa z list lub kursora i tam przykładowa aplikacja, aby zobaczyć, jak to wygląda i działa.

W rzeczywistości, nie ma wsparcia dla wszystkich dostawców treści, takich jak Android: kontakty, SMS, połączenia, ... Pełna doc ze wszystkimi opcjami: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers

Nadzieję, że pomogło :)