Entwickeln eines Web-Monitors in Android
Ich möchte die Websites, die ein Benutzer in Android öffnet, überwachen / filtern.
Ich weiß, wie ich die zuletzt aufgerufene URL (im Android-Standardbrowser) mithilfe eines ContentObservers im Browserverlauf abrufen kann ...
private static class BrowserObserver extends ContentObserver {
private static String lastVisitedURL = "";
private static String lastVisitedWebsite = "";
//Query values:
final String[] projection = new String[] { Browser.BookmarkColumns.URL }; // URLs
final String selection = Browser.BookmarkColumns.BOOKMARK + " = 0"; // history item
final String sortOrder = Browser.BookmarkColumns.DATE; // the date the item was last visited
public BrowserObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange);
//Retrieve all the visited URLs:
final Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, projection, selection, null, sortOrder);
//Retrieve the last URL:
cursor.moveToLast();
final String url = cursor.getString(cursor.getColumnIndex(projection[0]));
//Close the cursor:
cursor.close();
if ( !url.equals(lastVisitedURL) ) { // to avoid information retrieval and/or refreshing...
lastVisitedURL = url;
//Debug:
Log.d(TAG, "URL Visited: " + url + "\n");
}
}
}
So registrieren Sie den von mir verwendeten ContentObserver:
browserObserver = new BrowserObserver(new Handler());
getContentResolver().registerContentObserver(Browser.BOOKMARKS_URI, true, browserObserver);
Und um die Registrierung aufzuheben:
getContentResolver().unregisterContentObserver(browserObserver);
Das funktioniert. Auf diese Weise kann ich die URLs jedoch erst analysieren, nachdem der Browser sie geladen hat.
Gibt es eine Möglichkeit, die URLs abzurufen, bevor der Browser sie tatsächlich in Android lädt?