android系统设置中修改声音与振动,“您无法更改私人安全设置” – 如何在Android 6中切换铃声振动?...

由于近期关于Android 6 Marshmallow有关权限的更改,以下代码不再起作用并引发异常.

Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 0);

即使给予应用程序的WRITE_SETTINGS权限,也会发生这种情况:

Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);

Uri uri = Uri.fromParts("package", getActivity().getPackageName(), null);

intent.setData(uri);

startActivityForResult(intent, WRITE_SETTINGS_PERMISSION_REQUEST_CODE);

//at this point Settings activity is opened and user is prompted for permission

...

if (Settings.System.canWrite(this)) { //now returns true, because permissions were granted

Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 0); //still crashes

} else {

Log.w(LOG_TAG, "No permission to write settings.");

}

如何在Android 6中更改铃声的振动设置(和类似的安全设置)?

全堆栈跟踪:

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: Writing exception to parcel

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: java.lang.IllegalArgumentException: You cannot change private secure settings.

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at com.android.providers.settings.SettingsProvider.warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk(SettingsProvider.java:1173)

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at com.android.providers.settings.SettingsProvider.enforceRestrictedSystemSettingsMutationForCallingPackage(SettingsProvider.java:1030)

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at com.android.providers.settings.SettingsProvider.mutateSystemSetting(SettingsProvider.java:906)

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at com.android.providers.settings.SettingsProvider.insertSystemSetting(SettingsProvider.java:874)

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:257)

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at android.content.ContentProvider$Transport.call(ContentProvider.java:398)

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:283)

10-12 02:26:37.728 1927-2765/? E/DatabaseUtils: at android.os.Binder.execTransact(Binder.java:453)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: FATAL EXCEPTION: IntentService[DetectedActivityIntentService]

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: Process: , PID: 10084

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: java.lang.IllegalArgumentException: You cannot change private secure settings.

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1322)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.provider.Settings$System.putStringForUser(Settings.java:1671)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.provider.Settings$System.putIntForUser(Settings.java:1776)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.provider.Settings$System.putInt(Settings.java:1770)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at .DetectedActivityIntentService.activate(DetectedActivityIntentService.java:116)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at .DetectedActivityIntentService.onHandleIntent(DetectedActivityIntentService.java:94)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)

10-12 02:26:37.729 10084-11411/ E/AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:61)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值