2013-09-03 9 views
6

Ich suche nach einer Möglichkeit, die aktuelle URL zu erhalten, die ein Benutzer in der Android-Browseranwendung besucht. Ich fand heraus, dass ich die letzte besuchte URL aus der Browser.BOOKMARKS_URI Datenbank mit dem folgenden Verfahren erhalten werden:Abrufen der aktuellen URL in einem Android-Browser

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

Das Problem dabei ist, dass die Browser.BOOKMARKS_URI db nicht aktualisiert, wenn der Benutzer drückt, um zurück um zur vorherigen Seite im Browser zu navigieren, und die Abfrage gibt falsche Ergebnisse zurück.

Siehe das folgende Beispiel:

  1. Benutzer navigiert zu www.google.com ->Abfrage gibt "www.google.com"
  2. Benutzer navigiert zu www.imdb.com ->liefert den Wert "www.imdb.com"
  3. Benutzer drückt auf www.google.com, um wieder zurück ->liefert den Wert "www.imdb.com" (!!)

Hat jemand eine Idee, wie man die korrekte URL zurückgibt, die ein Benutzer ansieht?

+0

Der Inhalt Resolver wie erwartet funktioniert: Drücken Sie die 'www.google.com' Seite nicht zurück nicht neu geladen, sondern es aus dem Cache liest. Dasselbe passiert, wenn der Benutzer die Registerkarte wechselt: Der Verlauf zeigt die zuletzt geladene URL an, nicht unbedingt die, die angezeigt wird. Sie können die aktuelle URL in einem in Ihre App eingebetteten WebView verfolgen. –

+0

Ich arbeite nicht mit einem in meine App eingebetteten WebView. Ich versuche die aktuelle Webseite der Android Browser App zu finden. –

+0

Ich denke, das ist außerhalb einer normalen App-Funktion, in der Regel können Sie nicht auf andere App-Daten zugreifen, es sei denn, es bietet irgendwie, Browser-Geschichte scheint das einzige, was Sie tun können. – Nanoc

Antwort

0

Ich denke, dass Sie den folgenden Approach nicht durchgemacht haben. einmal probier es aus! Sie können den Browserverlauf genauso aufrufen wie für andere ContentProvider. Neben dem Browserverlauf können Sie auch eine Liste von Lesezeichen erhalten.

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

und Sie müssen die Erlaubnis auch

com.android.browser.permission.READ_HISTORY_BOOKMARKS 
+0

Sie machen im Grunde dasselbe, was ich tue, nämlich die Datenbank "Browser.BOOKMARKS_URI" zu durchsuchen. Der einzige Unterschied besteht darin, dass ich nur die neueste URL erhalte und Sie alle URLs erhalten. Und wie ich in meiner Frage geschrieben habe, hält die 'Browser.BOOKMARKS_URI' Datenbank die aktuelle URL nicht, nachdem ein Benutzer zurück drückt. –

+0

Ich habe eine Idee, was ist mit dem JQuery-Handy für diese Operation? –

+0

JQuery Mobile wird mir nur helfen, wenn ich meine eigene Browser-Anwendung schreibe, aber ich versuche, die aktuelle URL aus dem nativen \ Chrome Android Browser zu bekommen. –