当前位置: 首页 > 知识库问答 >
问题:

以编程方式禁用移动网络

宋典
2023-03-14

我正在开发一个应用程序,用户可以通过点击按钮启用/禁用移动网络。我在谷歌上搜索过这个问题,但我只得到了飞机模式的解决方案。在飞行模式下,WI-FI和蓝牙也被禁用。我不希望他们使用飞机模式的概念来禁用。我只想禁用移动网络。按语法实现它的可能方式是什么?

共有3个答案

须彭亮
2023-03-14

使用以下代码禁用/启用移动网络...

private void setMobileConnectionEnabled(Context context, boolean enabled) {
           final ConnectivityManager mConnectivityManager = (ConnectivityManager)  context.getSystemService(Context.CONNECTIVITY_SERVICE);
           final Class mClass = Class.forName(mConnectivityManager.getClass().getName());
           final Field mField = mClass.getDeclaredField("mService");
           mField.setAccessible(true);
           final Object mObject = mField.get(mConnectivityManager);
           final Class mConnectivityManagerClass =  Class.forName(mObject.getClass().getName());
           final Method setMobileDataEnabledMethod = mConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
           setMobileDataEnabledMethod.setAccessible(true);

           setMobileDataEnabledMethod.invoke(mObject, enabled);
}

您必须在menifest中添加以下权限。xml

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

如果要禁用整个网络,则可以执行禁用/启用AirplaneMode

鲁鹏
2023-03-14

如果您具有root权限,则可以使用此方法禁用移动网络:

try {
    Runtime.getRuntime().exec("su -c svc data disable");
} catch (IOException e) {
    Log.d("Error", e.getMessage());
}

如果您想启用移动网络,只需将禁用替换为启用即可。

晁文斌
2023-03-14

移动数据是全局设置(以前的安全设置)。根据留档

全局系统设置,包含始终相同地应用于所有已定义用户的首选项。应用程序可以读取这些,但不允许写入;与“安全”设置一样,这些设置也适用于用户必须通过系统UI或这些值的专用API显式修改的首选项。

不允许应用程序在没有用户直接参与的情况下更改此设置的原因是为了保护用户在恶意应用程序“决定”在漫游时打开移动数据或为没有数据统一费率的用户支付意外账单。

任何允许更改此设置的现有解决方案都会使用反射,并利用Android系统中可能仍存在于某些手机上的安全漏洞。在任何情况下,Android团队都非常认真地对待这些漏洞,一旦发现它们,他们就会修复安全问题。因此,任何今天有效的解决方案都将在明天失效。我不会依赖他们。

如果您想帮助用户更快地从应用程序中切换移动数据,您应该弹出一个系统设置对话框,用户可以在其中自行打开或关闭移动数据。在Android4.0及更高版本中,您可以像下面这样做。

Intent intent = new Intent();
intent.setClassName("com.android.settings",
     "com.android.settings.Settings$DataUsageSummaryActivity");
startActivity(intent);

如果您仍然决定使用“直接切换”,则可以使用此线程中发布的一种基于反射的解决方案。但是请注意,它们不会在每一部手机上都工作,并且在每次系统更新后都会停止工作。

 类似资料:
  • 是否有一种编程(基于属性)的方法在Spring引导(1.2.2)中禁用RabbitAutoConfiguration。 看起来像Spring。rabbitmq。dynamic=false仅禁用AmqpAdmin,而不禁用连接工厂等。 我们想要一个模型,其中应用程序属性可以来自Spring Cloud config(包括控制总线)或通过-D jvm args。这个决定是在部署时做出的。当属性来自-D

  • 问题内容: 我需要从Windows XP中的脚本启用/禁用完全网络接口。我正在寻找python解决方案,但是任何通用的方式(例如WMI,某些命令行ànetsh,某些Windows调用)都是受欢迎的,并且会进行调整。谢谢。 问题答案: 使用netsh接口用法设置接口[name =] IfName [[admin =] ENABLED | DISABLED [connect =] CONNECTED

  • 当我从中删除一个项目时,我希望显示一个“swipe”动画,即该项目从屏幕上侧向移动。我相信使用支持“swipe to dissist”,但这是触摸启动的,而我希望能够以编程方式启动swipe。 我还尝试通过扩展来设置项动画器。使用这种方法,我可以让项目左右滑动,但不幸的是,列表中的间隙很快就会关闭,以至于在列表项间隙关闭之前,滑动不会完成。 有人知道怎么做吗?

  • 问题内容: 使用jQuery,我想禁用主体的滚动: 我的想法是: 组 捕获当前 绑定到正文滚动事件,将scrollTop / scrollLeft设置为捕获的值。 有没有更好的办法? 更新: 我知道有人会在想“为什么他不只是在面板上使用?”。 请不要提出这个建议,因为我还有其他原因。 问题答案: 我发现执行此操作的唯一方法与您所描述的类似: 抓住当前滚动位置(不要忘记水平轴!)。 将溢出设置为隐藏

  • 本文向大家介绍在iOS中以编程方式禁用滚动视图?,包括了在iOS中以编程方式禁用滚动视图?的使用技巧和注意事项,需要的朋友参考一下 滚动视图是iOS开发人员遇到的最困难和最复杂的主题之一。在这里,我们将看到如何以编程方式禁用滚动视图。 要禁用它,我们需要使滚动视图的“ isScrollEnabled”属性为false。 将以下代码复制到文件中。

  • 我们有一个应用程序可以扫描蓝牙设备。负责扫描的代码应仅在启用蓝牙时运行。此外,我们希望在任何时间点禁用/启用此功能。 我们选择实现为BluetoothAdapter注册的BroadcastRecector。ACTION_STATE_CHANGED广播。 以下是我们遇到的一些问题: 以编程方式启用BroadcastRecector: 当应用程序被终止时,BroadcastReceiver也不再处于活