বিকাশকারী পূর্বরূপ 2 অ্যাপ্লিকেশনটির মাধ্যমে কীভাবে অনুমতিগুলির জন্য অনুরোধ করা হয় তাতে কিছু পরিবর্তন আনুন ( http://developer.android.com/preview/support.html#preview2- নোটগুলিও দেখুন )।
প্রথম ডায়ালগটি এখন এর মতো দেখায়:
কোনও "আবার কখনও দেখাবেন না" চেক-বাক্স নেই (বিকাশকারী পূর্বরূপ 1 এর বিপরীতে)। যদি ব্যবহারকারী অনুমতি অস্বীকার করে এবং যদি অ্যাপ্লিকেশনটির জন্য অনুমতিটি প্রয়োজনীয় হয় তবে অ্যাপ্লিকেশনটি সেই অনুমতি চাওয়ার কারণ ব্যাখ্যা করার জন্য এটি অন্য একটি ডায়ালগ উপস্থাপন করতে পারে, যেমন:
ব্যবহারকারী যদি আবার অস্বীকার করে তবে অ্যাপ্লিকেশনটির যদি সেই অনুমতিটির প্রয়োজন হয় বা সীমাবদ্ধ কার্যকারিতা নিয়ে চলতে থাকে তবে তা বন্ধ করে দেওয়া উচিত। যদি ব্যবহারকারী পুনরায় বিবেচনা করে (এবং পুনরায় চেষ্টা নির্বাচন করে), আবার অনুমতিটির জন্য অনুরোধ করা হয়। এবার প্রম্পটটি এরকম দেখাচ্ছে:
দ্বিতীয়বার "আর কখনও জিজ্ঞাসা করবেন না" চেক-বক্স প্রদর্শিত হবে। যদি ব্যবহারকারী আবার অস্বীকার করে এবং চেক-বাক্সটি টিক দেওয়া থাকে তবে আর কিছুই হওয়ার কথা না। চেক-বাক্সটি টিকযুক্ত কিনা তা নির্ধারণ করা যেতে পারে ক্রিয়াকলাপ.শল্ডশোরউইকুয়েস্টপিরমিশনেশন (স্ট্রিং) ব্যবহার করে, যেমন:
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
অ্যান্ড্রয়েড ডকুমেন্টেশন এটাই বলেছে ( https://developer.android.com/training/permission/requesting.html ):
আপনার অতিরিক্ত বিবরণ দেওয়ার যে পরিস্থিতিতে প্রয়োজন তা সন্ধান করতে, সিস্টেমটি Activity.shouldShowRequestPermissionRationale (স্ট্রিং) পদ্ধতি সরবরাহ করে। এই অ্যাপ্লিকেশনটি পূর্বে যদি এই অনুমতিটির জন্য অনুরোধ করে এবং ব্যবহারকারী অনুরোধটি প্রত্যাখ্যান করে তবে এই পদ্ধতিটি সত্য ফিরে আসে। এটি ইঙ্গিত দেয় যে আপনার অনুমতিটির প্রয়োজন কেন আপনার সম্ভবত ব্যবহারকারীকে ব্যাখ্যা করা উচিত।
যদি ব্যবহারকারী অতীতে অনুমতি অনুরোধটি প্রত্যাখ্যান করে এবং অনুমতি অনুরোধ সিস্টেম সংলাপে পুনরায় জিজ্ঞাসা করবেন না বিকল্পটি চয়ন করে, এই পদ্ধতিটি মিথ্যা প্রত্যাখ্যান করে। যদি ডিভাইস নীতি অ্যাপ্লিকেশনটিকে সেই অনুমতি থেকে বাধা দেয় তবে পদ্ধতিটিও মিথ্যা ফেরত দেয়।
ব্যবহারকারী "আর কখনও জিজ্ঞাসা করবেন না" দিয়ে অস্বীকার করেছে কিনা তা জানতে আপনি যখন ব্যবহারকারী অনুমতি না দিয়েছিলেন তখন আপনার onRequestPerificationsResult এ shouldShowRequestPermissionRationale পদ্ধতিটি চেক করতে পারেন ।
@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);
ব্যবহারকারীকে সরাসরি অনুমোদনের পৃষ্ঠায় প্রেরণের কোনও উপায় নেই।