在 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 监视器的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 android 监视器中读取 Slog?

如何监视自己计算机上运行的网络数据

iOS:iOS 监视器 XMLHttpRequest 是不是在 web 视图中打开?

Android设备监视器无法在Ubuntu 17.10中打开

如何在 React Native 中启用 Android 监视器以检查日志?

在 Web 应用程序的压力测试期间记录性能时,我应该在 Windows 性能监视器中使用哪些计数器?