2015-10-12 2 views
16

एंड्रॉइड 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) 
+0

यह एक पूरा जवाब नहीं है, लेकिन उम्मीद है कि यह मदद मिलेगी - ऐसा लगता है कि कंपन सेटिंग का एक बहुत ले जाया गया/एम में बदल Http://developer.android.com/reference/android/provider/Settings.Secure.html पर एक नज़र डालें। मुझे लगता है कि कम से कम 3 प्रविष्टियों में वर्णन है: "एम को लक्षित करने वाले ऐप से इस सेटिंग तक पहुंच या बाद में सुरक्षा अपवाद फेंकता है "। – WoogieNoogie

+0

मैं एक ही समस्या पर फंस गया हूँ। सुरक्षा अपवाद के बारे में कोई नोट नहीं है और यह दस्तावेज़ में एक सुरक्षित सेटिंग है। – user1806772

+0

दस्तावेज़ों के अनुसार, आपको ACTION_MANAGE_WRITE_SETTINGS कार्रवाई के साथ एक गतिविधि लॉन्च करने के लिए सिस्टम सेटिंग्स इंटरफ़ेस दिखाना होगा। http://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS – mehmet6parmak

उत्तर

0

पर this ticket आधार पर समस्या दिसम्बर 9 को हल किया जा रहा है। भविष्य के निर्माण में समस्या तय की जाएगी।

स्टैक ओवरफ़्लो सदस्य द्वारा जारी किया गया था और here पर चर्चा की गई।

4

क्योंकि सुरक्षा

के रूप में हम जानते हैं, एंड्रॉयड 6.0 (Marshmallow) में, एंड्रॉयड रणनीतियों के बहुत सारे सुरक्षा नियंत्रित करने के लिए जोड़ने के लिए, इस तरह के रूप दक्षता को बढ़ावा देने के:

  • रनटाइम अनुमति
  • डोज़ मोड (पावर मैनेजर)
  • फिर से लिखें सेटिंग्सप्रदाता see details
    • से कदम सिस्टम सेटिंग डाटाबेस एक्सएमएल को
    • /data/data/com.android.providers.settings/../settings.db ->/डेटा/प्रणाली/उपयोगकर्ताओं/userid/settings_ [प्रणाली | वैश्विक | सुरक्षित] .xml

तो अब (के बाद एपीआई 22)

  • आप कर सकते हैं नहीं कुछ निजी/खतरनाक सेटिंग्स लिखें
  • आप EXCEPTION एपीआई स्तर 22 या बाद में पोर्टिंग के दौरान सौदा कर सकते हैं। see details

पुनश्च

need deal with some EXCEPTION

can not change

+0

धन्यवाद, लेकिन यह उत्तर गलत है (या बल्कि ऑफ-विषय)। मुझे पता है कि VIBRATE_WHEN_RINGING एक निजी सुरक्षित सेटिंग है, लेकिन मेरा प्रश्न खुला रहता है। – EyesClear

+0

मैं देख रहा था कि settings.db कहाँ गया था। यह जानकारी खोजने में मुश्किल थी। धन्यवाद! –

संबंधित मुद्दे