title: "You cannot change private secure settings" - how to toggle ringtone vibration in Android 6?
body: <p>Due to recent changes in Android 6 Marshmallow regarding permissions, the following code no longer works and throws an exception.</p>
  
  <pre><code>Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 0);
  </code></pre>
  
  <p>This happens even after granting <code>WRITE_SETTINGS</code> permission to the app:</p>
  
  <pre><code>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.");
  }
  </code></pre>
  
  <p>How can I change the ringtone vibration settings (and similar <em>secure settings</em>) in Android 6?</p>
  
  <p>Full stack trace:</p>
  
  <pre><code>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/&lt;package_name&gt; E/AndroidRuntime: FATAL EXCEPTION: IntentService[DetectedActivityIntentService]
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime: Process: &lt;package_name&gt;, PID: 10084
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime: java.lang.IllegalArgumentException: You cannot change private secure settings.
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1322)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.provider.Settings$System.putStringForUser(Settings.java:1671)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.provider.Settings$System.putIntForUser(Settings.java:1776)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.provider.Settings$System.putInt(Settings.java:1770)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at &lt;package_name&gt;.DetectedActivityIntentService.activate(DetectedActivityIntentService.java:116)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at &lt;package_name&gt;.DetectedActivityIntentService.onHandleIntent(DetectedActivityIntentService.java:94)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
  10-12 02:26:37.729 10084-11411/&lt;package_name&gt; E/AndroidRuntime:     at android.os.HandlerThread.run(HandlerThread.java:61)
  </code></pre>