我正在开发一个需要下载大量数据的Android应用程序。
我想测量我的应用程序在特定时间段(比如一个月)的数据流量。
此选项位于"系统设置"->"数据使用情况"中。
- 有什么方法可以通过编程方式访问此设置吗
- 我可以使用一些android libs来获取流量吗
我知道TrafficStats类,但我无法获得特定时间段的流量,当我启动设备时,这些数据会丢失。
- 有什么方法可以通过编程方式访问此设置吗
请尝试以下代码:
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"/>
- 我可以使用一些android libs来获取流量吗
您可以通过TrafficStats为所有进程设置警报或线程服务,以定期获取流量。如果你想得到每个流程的流量,我想你可以看到这个答案。