2013-09-03 28 views
6

Szukam sposobu na uzyskanie bieżącego adresu URL użytkownika odwiedzanego w aplikacji przeglądarki na Androida. Pomyślałem, że mogę dostać ostatni odwiedził URL z bazy Browser.BOOKMARKS_URI stosując następujące techniki:Uzyskiwanie bieżącego adresu URL w przeglądarce Androida

Cursor cursor = context.getContentResolver().query(Browser.BOOKMARKS_URI, 
     Browser.HISTORY_PROJECTION, null, null, 
     Browser.BookmarkColumns.DATE + " DESC"); 
cursor.moveToNext(); 
String url = cursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX); 
cursor.close(); 

Problem z tym jest to, że Browser.BOOKMARKS_URI db nie zostanie zaktualizowany, gdy użytkownik naciska w kolejności aby przejść do poprzedniej strony w przeglądarce, a zapytanie zwraca nieprawidłowe wyniki.

Zobacz poniższy przykład:

  1. użytkownik nawiguje do www.google.com ->zwrotów zapytania "www.google.com"
  2. użytkownik nawiguje do www.imdb.com ->powraca zapytania "www.imdb.com"
  3. użytkownik naciśnie z powrotem wrócić do www.google.com ->powraca zapytania "www.imdb.com" (!!)

Czy ktoś ma pomysł, jak zwrócić poprawny adres URL, który przegląda użytkownik?

+0

Program rozpoznawania zawartości działa zgodnie z oczekiwaniami: prasy z powrotem nie przeładować 'stronę www.google.com', ale czyta go z pamięci podręcznej. To samo dzieje się, gdy użytkownik przełącza zakładkę: historia pokazuje ostatnio załadowany adres URL, niekoniecznie ten, który jest wyświetlany. Możesz śledzić bieżący adres URL w WebView wbudowanym w Twoją aplikację. –

+0

Nie pracuję z WebView osadzonym w mojej aplikacji. Próbuję znaleźć aktualną stronę przeglądarki aplikacji na Androida. –

+0

Myślę, że poza zwykłą funkcją aplikacji, zazwyczaj nie można uzyskać dostępu do danych innej aplikacji, chyba że dostarczą ją w jakiś sposób, wydawanie historii przeglądarki wydaje się jedyną rzeczą, którą możesz zrobić. – Nanoc

Odpowiedz

0

Myślę, że nie przeszedłeś następującego zatwierdzenia. raz spróbuj! Dostęp do historii przeglądania można uzyskać w ten sam sposób, co w przypadku innych dostawców treści. Oprócz historii przeglądania możesz również uzyskać listę zakładek.

Cursor webLinksCursor = getContentResolver().query(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, null, null, Browser.BookmarkColumns.DATE + " DESC"); 
int row_count = webLinksCursor.getCount(); 

int title_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.TITLE); 
int url_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.URL); 

if ((title_column_index > -1) && (url_column_index > -1) && (row_count > 0)) 
{ 
    webLinksCursor.moveToFirst(); 
    while (webLinksCursor.isAfterLast() == false) 
    { 
     if (webLinksCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX) != 1) 
     { 
      if (!webLinksCursor.isNull(url_column_index)) 
      { 
       Log.i("History" , "Last page browsed " + webLinksCursor.getString(url_column_index)); 
       break; 
      } 
     } 
     webLinksCursor.moveToNext(); 
    }    
} 
webLinksCursor.close(); 

i trzeba pozwolenie również

com.android.browser.permission.READ_HISTORY_BOOKMARKS 
+0

Zasadniczo robisz to samo co ja, czyli przechodzę przez bazę danych 'Browser.BOOKMARKS_URI'. Jedyną różnicą jest to, że otrzymuję tylko najnowszy URL i otrzymujesz wszystkie adresy URL. I jak pisałem w moim pytaniu, baza danych "Browser.BOOKMARKS_URI" nie przechowuje aktualnego adresu URL po tym, jak użytkownik naciśnie ponownie. –

+0

Mam pomysł, co z komórką JQuery dla tej operacji? –

+0

JQuery mobile pomoże mi tylko wtedy, gdy napiszę własną aplikację przeglądarki, ale staram się uzyskać aktualny adres URL z natywnej przeglądarki Chrome Chrome. –