3

在我的代码有:vibrate_when_ringing在Android棉花糖(6.0)

Settings.System.putInt(this.getContentResolver(), "vibrate_when_ringing", isVibrateWhenRinging ? 1 :0); 

使用以下权限:

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

这从果冻豆做工精细(API 16),直到棒棒堂(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我们也无法改变像“振铃时振动”这样的正常设置。我希望我错了。

+0

目前还不清楚它是否是一个bug,但是不可能写很多设置:( – greywolf82

+0

我发现如果你将targetSdkVersion设置为22即使你在Android M中运行,那么更改vibrate_when_ringing也会起作用。这在我看来是23中的一个bug。 –

回答

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和如果你是,不要使用该设置。

1

您应该调用Settings.System.canWrite()以查看是否可以编写此设置。

如果函数返回false,那么用户可以同意让您的应用程序写入设置:

Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); 
intent.setData(Uri.parse("package:" + getApplicationContext().getPackageName())); 
startActivity(intent); 
+0

我这样做了,并且我还提示用户在问题中写到Settings.ACTION_MANAGE_WRITE_SETTINGS。我为开发团队打开了一个Google错误:https:/ /code.google.com/p/android/issues/detail?id=194376&can=4&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened。 –