如何以编程方式访问特定应用程序的数据使用设置?

时间:2014-08-26 07:03:59

标签: android networking 3g

我正在开发一款需要下载大量数据的Android应用。

我想测量我的应用在特定时间段(如月份)的数据流量。

此选项在系统设置中可用 - >数据使用。

  1. 有没有办法以编程方式访问此设置?
  2. 我可以使用一些Android库来获取流量吗?
  3. 我知道TrafficStats类,但是在特定时间段内无法获得流量,当我启动设备时,这些数据会丢失。

1 个答案:

答案 0 :(得分:1)

  1. 有没有办法以编程方式访问此设置?
  2. 请尝试以下代码:

    public boolean invokeMethod(String methodName, Object[] args) throws Exception {
        ConnectivityManager mcm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        Class ownerClass = mcm.getClass();
        Class[] argsClass = null;
        if (args != null) {
            argsClass = new Class[1];
            argsClass[0] = args.getClass();
        }
        Method method = ownerClass.getMethod(methodName, argsClass);
        return (Boolean)method.invoke(mcm, args);
    }
    
    public Object invokeBooleanArgMethod(String methodName, boolean value) throws Exception {
        ConnectivityManager mcm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        Class ownerClass = mcm.getClass();
        Class[]  argsClass = new Class[1];
        argsClass[0] = boolean.class;
        Method method = ownerClass.getMethod(methodName,argsClass);
        return method.invoke(mcm, value);
    }
    
    /* use these two method like these */
    Object[] arg = null;
    try {
        boolean isMobileDataEnable = invokeMethod("getMobileDataEnabled", arg);
        if(!isMobileDataEnable){
            invokeBooleanArgMethod("setMobileDataEnabled", true);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    此外,在AndroidManifest.xml中,您需要添加

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    
    1. 我可以使用一些Android库来获取流量吗?
    2. 您可以设置服务中的警报或线程,以便定期使用TrafficStats获取所有进程的流量。如果您希望获得每个流程的流量,我认为您可以看到this回答。