在 Android 中开发 Web 监视器
Posted
技术标签:
【中文标题】在 Android 中开发 Web 监视器【英文标题】:Developing a Web Monitor in Android 【发布时间】:2013-10-27 13:03:17 【问题描述】:我想监控/过滤用户在 android 中打开的网站。
我知道如何使用浏览器历史记录中的 ContentObserver 检索上次访问的 URL(在 Android 默认浏览器中)...
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");
注册我使用的 ContentObserver:
browserObserver = new BrowserObserver(new Handler());
getContentResolver().registerContentObserver(Browser.BOOKMARKS_URI, true, browserObserver);
然后取消注册:
getContentResolver().unregisterContentObserver(browserObserver);
这行得通。但是,通过这种方式,我只能在浏览器加载 URL 后对其进行分析。
现在,有没有办法在浏览器实际在 Android 中加载 URL 之前检索它们?
【问题讨论】:
【参考方案1】:一个有助于创建 Web 监视器的解决方案是创建您自己的 *** 服务,以便您监控所有设备流量。 NetGuard 项目就是一个很好的例子。
https://github.com/M66B/NetGuard
请注意,在某些设备中,系统不会通过 *** 某些应用程序(例如,在三星设备中,三星 Web 浏览器不通过系统 *** 转发,在 S5 与 Android 6.0 中检查)。
此外,您的应用程序应请求用作 *** 服务的权限,但一旦用户授予此权限,它就可以监控和过滤大部分设备网络流量。
【讨论】:
以上是关于在 Android 中开发 Web 监视器的主要内容,如果未能解决你的问题,请参考以下文章
iOS:iOS 监视器 XMLHttpRequest 是不是在 web 视图中打开?
Android设备监视器无法在Ubuntu 17.10中打开