如何仅以编程方式为我的应用禁用移动数据

Mar*_*arc 5 networking android

我正在开发一个应用程序,我担心用户之间可以传输的数据量。由于一些用户的移动数据计划有限,而有些则没有,我想知道是否可以开发一个开关来禁用特定应用程序的移动数据。有点像Android自己的数据使用情况->移动->应用程序->“限制后台数据”可以...

它说(并且确实)说“它仅禁用移动数据网络上的后台数据。如果有Wi-Fi,将使用Wi-Fi。”,我希望这样做,但不仅限于后台。

我确实知道我无法更改“限制后台数据”选项,因为如果应用程序可以取消切换它,它将变得毫无用处...但是有一种方法可以让我以编程方式说现在我的应用程序被禁止访问移动数据,现在不是吗?

作为我为什么要这么做的见解,当用户选择一个给定的选项(我做到了并且可行)时,我尝试不拨打远程访问电话,但是我似乎无法阻止某些数据泄漏(每天大约kbs) ...由于系统保持http连接或其他一些晦涩的原因...

我在eclipse上的应用程序的网络统计数据上以DDMS的角度看到了这些数据传输。

谢谢你的帮助

dug*_*ggu 0

以下代码用于禁用或启用移动数据:-

java代码

private void setMobileDataEnabled(Context context, boolean enabled) {
    final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final Class conmanClass = Class.forName(conman.getClass().getName());
    final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
    iConnectivityManagerField.setAccessible(true);
    final Object iConnectivityManager = iConnectivityManagerField.get(conman);
    final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
    final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
    setMobileDataEnabledMethod.setAccessible(true);

    setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
}
Run Code Online (Sandbox Code Playgroud)

显现

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
Run Code Online (Sandbox Code Playgroud)

  • @Marc,当您关闭应用程序时,您可以简单地启用它(它会关闭所有应用程序)。 (2认同)