android - 以编程方式禁用移动网络

标签 android telephonymanager

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

最佳答案

移动数据是Global setting (以前称为安全设置)。根据文档

Global system settings, containing preferences that always apply identically to all defined users. Applications can read these but are not allowed to write; like the "Secure" settings, these are for preferences that the user must explicitly modify through the system UI or specialized APIs for those values.

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

任何允许更改此设置的现有解决方案都使用反射并利用 Android 系统中的安全漏洞,该漏洞可能仍然存在于某些手机上。无论如何,Android 团队非常重视此类漏洞,他们会在发现漏洞后立即修复安全问题。因此,今天有效的任何解决方案明天都将停止工作。我不会依赖它们。

如果您想帮助用户更快地从您的应用程序中切换移动数据,您应该弹出一个系统设置对话框,用户可以在其中自行打开或关闭移动数据。在 Android 4.0 及更高版本中,您可以按照以下方式执行此操作。

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

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

关于android - 以编程方式禁用移动网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20699447/

相关文章:

Android新的底部导航栏或BottomNavigationView

android - 振铃状态 拨出电话

android - TelephonyManager 在 android studio 上崩溃

android - 在 Android 应用程序中处理来电

java - 如何在没有管理员的情况下在USB驱动器上安装android studio

java - Android 在每次方向改变时都会创建额外的 ListFragment

Android:更改 src alpha 并保留背景(将 src 与颜色混合)

android - 无法打开eclipse,启动屏幕闪烁但打不开

android - 如何获取安卓手机的电话号码?

android - 一些 GSM 设备在 Android 上因 CDMA SignalStrength 错误而崩溃