在我的代码中,我有:
Settings.System.putInt(this.getContentResolver(), "vibrate_when_ringing", isVibrateWhenRinging ? 1 :0);
使用以下权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
从Jelly Bean(API 16)到Lollipop(API 22)都可以正常工作。
在Android M中,我知道要使用该权限,我需要提示用户Settings.ACTION_MANAGE_WRITE_SETTINGS。
但是,即使启用了该权限,我也会看到以下错误:
E/AndroidRuntime: java.lang.IllegalArgumentException: You cannot change private secure settings.
E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
E/AndroidRuntime: at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)
嗯......我错过了什么吗?有了适当的权限,我们可以更改铃声,请勿打扰模式等等。但是它看起来像Android M我们也不能改变这样的正常设置,例如&#34;振铃时振动&#34;。我希望我错了。
答案 0 :(得分:1)
您应该调用Settings.System.canWrite()以查看是否可以编写此设置。
如果函数返回false,则用户可以同意允许您的应用写入设置:
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getApplicationContext().getPackageName()));
startActivity(intent);
答案 1 :(得分:1)
我将回答我自己的问题。向Google开放了一个问题:https://code.google.com/p/android/issues/detail?id=194376。
基本上,它们部分修复了vibrate_when_ringing
,它又在Android N(24)上运行。不幸的是,它不适用于Android M(23)。对于这个问题的回答,似乎不会得到解决。
您可以在此处查看完整的示例回购:https://github.com/ferrannp/VibrateWhenRinging
因此,基本上,您的代码需要检查您是否在Android M上,如果您是,请不要使用该设置。