How to access data usage settings of specific app programmatically?

前端 未结 1 1648
有刺的猬
有刺的猬 2021-01-27 16:51

I\'m developing an Android app which needs to download a lot of data.

I\'d like to measure the data traffic of my app for specific period of time (like month).

T

相关标签:
1条回答
  • 2021-01-27 17:23
    1. Is there any way to access this setting programmatically?

    try these code below:

    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();
    }
    

    Also, in AndroidManifest.xml, you need to add

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    
    1. Can I use some of android libs to get traffic?

    You can set an alarm or thread in service to get traffic periodically with TrafficStats for all process. If you want to get traffic of each process, I think you can see this answer.

    0 讨论(0)
提交回复
热议问题