डेवलपर पूर्वावलोकन 2 एप्लिकेशन द्वारा अनुमतियों का अनुरोध करने के तरीके में कुछ बदलाव लाता है (देखें http://developer.android.com/preview/support.html#preview2-notes )।
पहला संवाद अब इस तरह दिखता है:
कोई "फिर कभी नहीं दिखा" चेक-बॉक्स है (डेवलपर पूर्वावलोकन 1 के विपरीत)। यदि उपयोगकर्ता अनुमति से इनकार करता है और यदि एप्लिकेशन के लिए अनुमति आवश्यक है, तो वह इस कारण से एप्लिकेशन द्वारा उस अनुमति के लिए पूछे जाने वाले कारण को समझाने के लिए एक और संवाद प्रस्तुत कर सकता है:
यदि उपयोगकर्ता फिर से गिरावट करता है, तो ऐप को या तो बंद कर देना चाहिए अगर यह बिल्कुल अनुमति की आवश्यकता है या सीमित कार्यक्षमता के साथ चल रहा है। यदि उपयोगकर्ता पुनर्विचार करता है (और पुन: प्रयास करता है), तो अनुमति फिर से मांगी जाती है। इस बार संकेत इस तरह दिखता है:
दूसरी बार "कभी नहीं पूछें" चेक-बॉक्स दिखाया गया है। यदि उपयोगकर्ता फिर से इनकार करता है और चेक-बॉक्स पर टिक किया जाता है तो अधिक कुछ नहीं होना चाहिए। चेकबॉक्स को टिक किया गया है या नहीं, इसका निर्धारण गतिविधि.shouldShowRequestPermissionRationale (स्ट्रिंग) का उपयोग करके किया जा सकता है, जैसे:
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
एंड्रॉइड प्रलेखन यही कहता है ( https://developer.android.com/training/permissions/requesting.html ):
उन स्थितियों को खोजने में मदद करने के लिए जहां आपको अतिरिक्त स्पष्टीकरण प्रदान करने की आवश्यकता होती है, सिस्टम गतिविधि प्रदान करता है। ShouldShowRequestPermissionRationale (स्ट्रिंग) विधि। यदि एप्लिकेशन ने पहले इस अनुमति का अनुरोध किया है और उपयोगकर्ता ने अनुरोध को अस्वीकार कर दिया, तो यह विधि सही साबित होती है। यह इंगित करता है कि आपको शायद उपयोगकर्ता को यह समझाना चाहिए कि आपको अनुमति की आवश्यकता क्यों है।
यदि उपयोगकर्ता ने अतीत में अनुमति अनुरोध को अस्वीकार कर दिया है और अनुमति अनुरोध सिस्टम संवाद में फिर से विकल्प न पूछें, तो यह विधि गलत हो जाती है। यदि डिवाइस नीति एप्लिकेशन को उस अनुमति के होने से रोकती है तो यह विधि भी गलत है।
यह जानने के लिए कि क्या उपयोगकर्ता ने "फिर से कभी नहीं पूछा" से इनकार किया है, तो आप फिर से अपने onRequestPcriResult में कंधों को देखने की अनुमति दे सकते हैं जब उपयोगकर्ता ने अनुमति नहीं दी थी।
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_PERMISSION) {
// for each permission check if the user granted/denied them
// you may want to group the rationale in a single dialog,
// this is just an example
for (int i = 0, len = permissions.length; i < len; i++) {
String permission = permissions[i];
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
// user rejected the permission
boolean showRationale = shouldShowRequestPermissionRationale( permission );
if (! showRationale) {
// user also CHECKED "never ask again"
// you can either enable some fall back,
// disable features of your app
// or open another dialog explaining
// again the permission and directing to
// the app setting
} else if (Manifest.permission.WRITE_CONTACTS.equals(permission)) {
showRationale(permission, R.string.permission_denied_contacts);
// user did NOT check "never ask again"
// this is a good place to explain the user
// why you need the permission and ask if he wants
// to accept it (the rationale)
} else if ( /* possibly check more permissions...*/ ) {
}
}
}
}
}
आप इस कोड के साथ अपना ऐप सेटिंग खोल सकते हैं:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
उपयोगकर्ता को सीधे प्राधिकरण पृष्ठ पर भेजने का कोई तरीका नहीं है।