我想刷新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)
答案 0 :(得分:0)
您提到您正在尝试修改飞行模式状态。自Android 4.2起,此功能已移至第三方应用。 From the release notes:
此处的几个现有设置已从
Settings.System
或Settings.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等。不包括拨打电话。 不适用于第三方应用程序。