gpt4 book ai didi

android - 如何在 Android 上禁用移动数据

转载 作者:IT王子 更新时间:2023-10-28 23:51:16 27 4
gpt4 key购买 nike

在有人告诉我购买应用程序之前快速回顾一下。 =)

我刚买了一个 EVO,它很快就耗尽了电池。我下载了 JuiceDefender 来管理我的移动数据连接。这似乎效果很好。但是,这些设置非常有限(即使在付费版本上也是如此)。

截至目前,我正在尝试开发一个更可定制的节电应用程序。我首先要做的主要事情是能够随意启用/禁用移动数据连接。

问题是我找不到任何有关如何执行此操作的代码 fragment 或文章。我唯一发现的是以下内容。我不知道这有多准确,但这是我在浏览 developer.android.com 时所能拼凑出来的全部内容

ConnectivityManager cm = (ConnectivityManager) this.getSystemService(CONNECTIVITY_SERVICE);
cm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "android.net.conn.CONNECTIVITY_CHANGE");

State state = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
textView.setText(state.name());

如果有人能指出任何可以提供帮助的东西,将不胜感激。

更新

Sprint 上的 HTC Evo 似乎不使用 APN 设置。我通过下载 APNDroid 并观察它不起作用对此进行了测试。然后我制作了一个快速应用程序将所有 APN 条目转储到屏幕上。这产生了一个结果,它是针对 mms 的。

查看 JuiceDefender 运行时的手机信息,我发现 GSRP 网络正在打开和关闭。这让我相信可以通过代码来做到这一点,即使我发现询问同一问题的每个页面都表示无法完成。关键是他们都说要像 APNDroid 那样做。请有人给我一些见解。

谢谢!

最佳答案

从“ Gingerbread ”开始,您可以使用 IConnectivityManager.setMobileDataEnabled() 方法。它隐藏在 API 中,但可以通过 reflection 访问。 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/net/ConnectivityManager.java#376

使用此方法,您可以更改系统设置:'设置 -> 无线和网络 -> 移动网络设置 -> 数据启用'

代码示例:

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

您还需要 CHANGE_NETWORK_STATE 权限。

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

不用说,这种方法在未来的 android 版本中可能不起作用。但我猜想“3G watchdog”、“APNdroid”或“DataLock”等应用程序都是这样工作的。


更新:
Lollipop 上不再提供 setMobileDataEnabled 方法

关于android - 如何在 Android 上禁用移动数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3644144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com