【发布时间】:2016-01-03 11:33:42
【问题描述】:
在我的应用程序中,targetSdkVersion 为 23,同时使用 API Settings.System.putString()。
引发以下错误并且应用程序崩溃
"AndroidRuntime: java.lang.IllegalArgumentException: 您不能将您的设置保存在安全设置中。"
在尝试解决方案后
Can't get WRITE_SETTINGS permission
并在 ACTION_MANAGE_WRITE_SETTINGS 打开的屏幕中授予应用程序写入权限。该应用程序仍然收到错误“您无法将设置保留在安全设置中”。
现在是否仅针对 OEM 开发的应用请求 WRITE_SETTINGS 权限? 有没有可能的解决方案?
分享一个示例代码,在 M OS 的 Nexus 5 设备上测试。
Android 清单片段:
android:minSdkVersion="17"
android:targetSdkVersion="23"
uses-permission android:name="android.permission.WRITE_SETTINGS"
代码片段:
protected void onResume() {
super.onResume();
boolean canDo = Settings.System.canWrite(this);
if (false == canDo)
{
Intent grantIntent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
startActivity(grantIntent);
}
else
{
Settings.System.putString(this.getContentResolver(),
"test.hemant", "hemantval");
}
}
日志栈:
E/DatabaseUtils( 779): Writing exception to parcel
E/DatabaseUtils( 779): java.lang.IllegalArgumentException: You cannot keep your settings in the secure settings.
E/DatabaseUtils( 779): at com.android.providers.settings.SettingsProvider.warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk(SettingsProvider.java:1175)
E/DatabaseUtils( 779): at com.android.providers.settings.SettingsProvider.enforceRestrictedSystemSettingsMutationForCallingPackage(SettingsProvider.java:1030)
E/DatabaseUtils( 779): at com.android.providers.settings.SettingsProvider.mutateSystemSetting(SettingsProvider.java:906)
E/DatabaseUtils( 779): at com.android.providers.settings.SettingsProvider.insertSystemSetting(SettingsProvider.java:874)
E/DatabaseUtils( 779): at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:257)
E/DatabaseUtils( 779): at android.content.ContentProvider$Transport.call(ContentProvider.java:398)
E/DatabaseUtils( 779): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:283)
E/DatabaseUtils( 779): at android.os.Binder.execTransact(Binder.java:453)
D/AndroidRuntime(19935): Shutting down VM
【问题讨论】:
-
你能发布更多代码来展示你是如何使用它的吗?
-
“Android M 6.0 RingtoneManager 早期的解决方案 - Manifest.permission.WRITE_SETTINGS 错误无效” -- 请解释一下“无效”是什么意思。
-
@CommonsWare:感谢您的帮助。这意味着在按照上述链接中提到的步骤并在 ACTION_MANAGE_WRITE_SETTINGS 打开的屏幕中授予应用程序写入权限之后。该应用仍然收到错误“您无法将您的设置保留在安全设置中”。
-
好的,那么我回来了 Sharj 的评论:您需要提供 minimal, complete, and verifiable example 以便我们能够为您提供帮助。在这种情况下,这将是完整的堆栈跟踪,以及从该堆栈跟踪引用的代码。
-
@CommonsWare:添加了带有堆栈跟踪的代码。
标签: android permissions settings