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).
This option is available on System Settings -> Data Usage.
- Is there any way to access this setting programmatically?
- Can I use some of android libs to get traffic?
I know about TrafficStats class but I can not get traffic for specific period of time and when i boot device this data is lost.
- 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"/>
- 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.