如何打开/关闭Cellular Network Android?

时间:2017-03-31 12:59:49

标签: java android android-studio

我想刷新android Cellular Network android,但是会收到错误。我想让它发挥作用。

我的代码:

Settings.System.putInt(getContentResolver(),
                Settings.Global.AIRPLANE_MODE_ON, mode ? 1 : 0);// Turning ON/OFF Airplane mode.

        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);// creating intent and Specifying action for AIRPLANE mode.
        intent.putExtra("state", !mode);// indicate the "state" of airplane mode is changed to ON/OFF
        sendBroadcast(intent);// Broadcasting and Intent

我的清单文件有权限。

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

错误:

  FATAL EXCEPTION: main
                                                                       Process: com.zt.refreshnetwork, PID: 20221
                                                                       java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE from pid=20221, uid=10237
                                                                           at android.os.Parcel.readException(Parcel.java:1684)
                                                                           at android.os.Parcel.readException(Parcel.java:1637)
                                                                           at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3537)
                                                                           at android.app.ContextImpl.sendBroadcast(ContextImpl.java:881)
                                                                           at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:421)
                                                                           at com.zt.refreshnetwork.MainActivity.modifyAirplanemode(MainActivity.java:140)
                                                                           at com.zt.refreshnetwork.MainActivity.airPlanemodeON(MainActivity.java:117)
                                                                           at com.zt.refreshnetwork.MainActivity$1.onClick(MainActivity.java:46)
                                                                           at android.view.View.performClick(View.java:5637)
                                                                           at android.view.View$PerformClick.run(View.java:22429)
                                                                           at android.os.Handler.handleCallback(Handler.java:751)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

1 个答案:

答案 0 :(得分:0)

您提到您正在尝试修改飞行模式状态。自Android 4.2起,此功能已移至第三方应用。 From the release notes:

  

此处的几个现有设置已从Settings.SystemSettings.Secure重新定位。如果您的应用当前正在对Settings.System中之前定义的设置进行更改(例如AIRPLANE_MODE_ON),那么您应该会在运行Android 4.2或更高版本的设备上执行此操作,如果这些设置是移至Settings.Global

     

您可以继续阅读Settings.Global中的设置,但由于设置不再被认为是安全的应用程序更改,尝试这样做会无声地失败,系统会向系统日志写一个警告在Android 4.2或更高版本上运行您的应用时。

如果你绝对想要这样做,你可能需要依靠反思和挖掘AOSP来源,但谷歌通常会出于安全原因进行这些改变。任何绕过这些措施的尝试都可能导致您的应用从Play商店中移除,或者如果基础方法发生变化,可能会导致您的应用在未来的Android版本中无法正常运行。

同样,在问题的原始版本中,您的应用正在请求MODIFY_PHONE_STATE权限。同样,这不适用于第三方应用程序,只有系统应用程序,这需要此应用程序在根设备上运行。 From the documentation (my bold):

  

允许修改电话状态 - 开机,mmi等。不包括拨打电话。   不适用于第三方应用程序。