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。 –