Android 6.0中的NetworkStats - 权限问题

时间:2016-08-16 14:23:18

标签: java android

我正在尝试开发一个可以从特定包中获取网络统计数据的应用,但我遇到了这些问题:

  1. 当我尝试使用Android 6.0的NetworkStats库(Marshmallow)时,我得到了这个例外:
  2.   

    NetworkStats:用户10412和当前进程都没有   android.permission.READ_NETWORK_USAGE_HISTORY。

    以下是代码:

    try {
    
        TelephonyManager tm;String subscriberID;
        NetworkStatsManager networkStatsManager;
        NetworkStats networkStats;NetworkStats.Bucket bucket;
    
        tm = (TelephonyManager) mContext.getSystemService(mContext.TELEPHONY_SERVICE);
        subscriberID = tm.getSubscriberId();
        networkStatsManager = mContext.getSystemService(NetworkStatsManager.class);
        networkStats = networkStatsManager.queryDetailsForUid
                (typeMobile, subscriberID, dtBegin, dtEnd, uidPackage);
    
        if(networkStats !=null){
            while (networkStats.hasNextBucket()) {
                bucket = new NetworkStats.Bucket();
                networkStats.getNextBucket(bucket);
                Log.d("Bucket RX:",bucket.getUid()+" -" +String.valueOf(bucket.getRxBytes()));
                Log.d("Bucket TX:",bucket.getUid()+" -" +String.valueOf(bucket.getTxBytes()));
            }
        }
    }
    catch (Exception ex){
        Logger.e(ex.getMessage());
    }
    
    1. 如何在以前版本的Android(5.0& 4.0)中获得NetworkStats的功能?有没有图书馆?

2 个答案:

答案 0 :(得分:0)

READ_NETWORK_USAGE_HISTORY权限仅授予系统应用程序。因此,除非您使用的是root手机,否则您将无法使用它。唯一的出路是使用自API级别8以来可用的TrafficStats

答案 1 :(得分:0)

嗯......经过一些关于互联网的研究后,我放弃使用这个Android原生图书馆。我已设法使其工作,但用户必须通过“用户数据访问”选项(位于“设置应用程序”下)启用它。然后我尝试向用户启动此应用程序,以便用户可以自己启用,但这在许多设备上都不起作用。看到这个链接:

Devices without "Apps using Usage Data" or android.settings.USAGE_ACCESS_SETTINGS intent

enter image description here