2010-04-05 7 views
31

Quiero leer el historial del navegador en el teléfono Android.Android leer el historial del navegador

He hecho algunas lecturas de documentos, luego llegué a saber que podemos leer el historial del navegador por la clase android.provider.Browser. Tiene:

final static Cursor 
getAllVisitedUrls(ContentResolver cr) 

... método que devuelve Cursor.

¿Puedo obtener ayuda para manejar Cursor, o cualquier código de ejemplo para obtener el historial del navegador?

Respuesta

29

No es realmente una respuesta, pero puedo decir lo que hice.

Primero clono el browser repo y trato de reproducir cómo obtienen el historial. Y empecé a recibir: La negación

Permiso: leer com.android.browser.BrowserProvider

por lo que añade:

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

Pero todavía me da el mismo error . Lo busqué en google y encontré esto Accessing Data With Android Cursors.

Espero que ayude.

+1

El permiso debería ser: '' Funciona entonces. – Firebrandt

+0

@Firebrandt: acabo de arreglarlo. Gracias. – Macarse

+0

¿Este método requiere acceso raíz, o solo ese permiso único? – ethanpil

9

Para Lollipop o anterior

estoy en condiciones de obtener el historial utilizando el siguiente código:

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ómo obtener el tiempo, es decir, cuando abrimos el sitio información – Venkat

+2

Log.v ("urlIdx", mCur.getString (Browser.HISTORY_PROJECTION_DATE_INDEX)); probar esto. y para obtener más información, visite http://developer.android.com/reference/android/provider/Browser.html –

+1

Esto ya no funcionará en Marshmallow: https://developer.android.com/about/versions/marshmallow/ android-6.0-changes.html # behavior-bookmark-browser – user1406716

18

managedQuery ha dejado de utilizarse a fin de utilizar getContentResolver su lugar, utilice el siguiente código:

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

también añadir permisos usando

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

¡esta respuesta funciona! También hice un ejemplo basado en esta respuesta https://github.com/shanwu/shanwu_coding_base/tree/bookmark_record_example – shanwu

+1

[La mayoría de las cosas relacionadas con los marcadores se eliminaron en el nivel API 23 (Android 6.0+)] (https: // desarrollador .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

[La mayoría de las cosas relacionadas con los marcadores se eliminaron en API nivel 23 (Android 6.0+)] (https: // desarrollador .android.com/about/versions/marshmallow/android-6.0-changes.html # behavior-bookmark-browser) – Aashish

3

Este post es un poco viejo, pero aquí es otra solución fácil para la obtención de datos relacionados con Bookmark y Search proveedores de contenido en Android:

Use este lib: https://github.com/EverythingMe/easy-content-providers

Obtenga toda marcadores:

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

Cada Bookmark tiene todos los campos, para que pueda obtener cualquier información que necesita: título, url, visitas, ...

Obtenga toda Buscar historia:

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

Se trabaja con listas o cursor y hay una aplicación de muestra para ver cómo se ve y funciona.

De hecho, existe un apoyo para todos los proveedores de contenido de Android como: Contactos, SMS, llamadas, ... doc completa con todas las opciones: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers

espero que ayudó :)

Cuestiones relacionadas