android – 获取设备网络网址调用

我正在尝试构建一个应用程序,为用户提供有关其网络使用情况的统计信息,

从3G / Wifi冲浪到应用网络使用.

我正在寻找的主要重要数据是网络呼叫的网址.

我有一个代码,找到浏览器历史记录:

private void getbrowserHistory()
{
    String[] proj = new String[]{browser.BookmarkColumns.TITLE,browser.BookmarkColumns.URL};
    String sel = browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history,1 = bookmark
    Cursor mCur = this.managedQuery(browser.BOOKMARKS_URI,proj,sel,null,null);
    this.startManagingCursor(mCur);
    mCur.movetoFirst();

    if (mCur.movetoFirst() && mCur.getCount() > 0)
    {
        while (mCur.isAfterLast() == false)
        {
            String title = mCur.getString(mCur.getColumnIndex(browser.BookmarkColumns.TITLE));
            String url = mCur.getString(mCur.getColumnIndex(browser.BookmarkColumns.URL));
            Log.d(LOG_TAG,"Site title: " + title);
            Log.d(LOG_TAG,"Site url: " + url);
            mCur.movetoNext();
        }
    }
}

但要找到应用程序网络使用情况,我需要更像WireShark的东西

我认为该问题的最终解决方案很复杂,但欢迎任何建议.

最佳答案
如果像您所说的那样,您正在处理有根设备,则可以将监视应用程序设置为认系统代理.

这样,通过充当transparent proxy,您将能够检测进入和离开连接.

我从哪里开始?

如果你想看看一个可能的实现,你可以试试ProxyDroid,这是开源的,绝对是一个很好的起点.

你应该做什么

您需要做的是触发一些iptables命令,以便将您的应用程序设置为系统代理:here您可以看到ProxyDroid如何做到这一点.

然后,您的应用程序将侦听连接请求,执行它们并相应地发送响应:同样,this一个非常基本的示例,说明整个事情在您的应用程序方面是如何工作的.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...