एंड्रॉइड 6 मार्शमलो में हालिया परिवर्तनों के कारण अनुमतियों के संबंध में, निम्नलिखित कोड अब काम नहीं करता है और अपवाद फेंकता है।"आप निजी सुरक्षित सेटिंग्स नहीं बदल सकते हैं" - एंड्रॉइड 6 में रिंगटोन कंपन को टॉगल कैसे करें?
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.");
}
मैं एंड्रॉयड 6 में रिंगटोन कंपन सेटिंग (और इसी तरह के सुरक्षित सेटिंग) कैसे बदल सकते हैं:
Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 0);
यह तब होता है यहां तक कि एप्लिकेशन को WRITE_SETTINGS
अनुमति प्रदान के बाद?
पूर्ण स्टैक ट्रेस:
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/<package_name> E/AndroidRuntime: FATAL EXCEPTION: IntentService[DetectedActivityIntentService]
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: Process: <package_name>, PID: 10084
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: java.lang.IllegalArgumentException: You cannot change private secure settings.
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1322)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.provider.Settings$System.putStringForUser(Settings.java:1671)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.provider.Settings$System.putIntForUser(Settings.java:1776)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.provider.Settings$System.putInt(Settings.java:1770)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at <package_name>.DetectedActivityIntentService.activate(DetectedActivityIntentService.java:116)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at <package_name>.DetectedActivityIntentService.onHandleIntent(DetectedActivityIntentService.java:94)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
10-12 02:26:37.729 10084-11411/<package_name> E/AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:61)
यह एक पूरा जवाब नहीं है, लेकिन उम्मीद है कि यह मदद मिलेगी - ऐसा लगता है कि कंपन सेटिंग का एक बहुत ले जाया गया/एम में बदल Http://developer.android.com/reference/android/provider/Settings.Secure.html पर एक नज़र डालें। मुझे लगता है कि कम से कम 3 प्रविष्टियों में वर्णन है: "एम को लक्षित करने वाले ऐप से इस सेटिंग तक पहुंच या बाद में सुरक्षा अपवाद फेंकता है "। – WoogieNoogie
मैं एक ही समस्या पर फंस गया हूँ। सुरक्षा अपवाद के बारे में कोई नोट नहीं है और यह दस्तावेज़ में एक सुरक्षित सेटिंग है। – user1806772
दस्तावेज़ों के अनुसार, आपको ACTION_MANAGE_WRITE_SETTINGS कार्रवाई के साथ एक गतिविधि लॉन्च करने के लिए सिस्टम सेटिंग्स इंटरफ़ेस दिखाना होगा। http://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS – mehmet6parmak