Geliştirici Önizleme 2, uygulama tarafından izinlerin istenmesinde bazı değişiklikler getirir (ayrıca bkz . Http://developer.android.com/preview/support.html#preview2-notes ).
İlk iletişim kutusu şimdi şöyle:
"Bir daha asla gösterme" onay kutusu yoktur (geliştirici önizlemesi 1'in aksine). Kullanıcı izni reddederse ve izin uygulama için gerekliyse, uygulamanın bu izni istemesinin nedenini açıklamak için başka bir iletişim kutusu sunabilir, örneğin:
Kullanıcı tekrar reddederse, uygulamanın bu izne kesinlikle ihtiyacı varsa kapatılması veya sınırlı işlevlerle çalışmaya devam etmesi gerekir. Kullanıcı yeniden düşünürse (ve yeniden denemeyi seçerse), izin tekrar istenir. Bu sefer bilgi istemi şöyle görünür:
"Bir daha sorma" onay kutusu ikinci kez görüntülendiğinde. Kullanıcı tekrar reddederse ve onay kutusu işaretliyse başka bir şey olmamalıdır. Onay kutusunun işaretlenip işaretlenmediği Activity.shouldShowRequestPermissionRationale (String) kullanılarak belirlenebilir, örneğin:
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {...
Android dokümantasyonu böyle diyor ( https://developer.android.com/training/permissions/requesting.html ):
Ek açıklama sağlamanız gereken durumları bulmanıza yardımcı olmak için, sistem Activity.shouldShowRequestPermissionRationale (String) yöntemini sağlar. Uygulama daha önce bu izni isterse ve kullanıcı isteği reddederse, bu yöntem true değerini döndürür. Bu, muhtemelen izne neden ihtiyacınız olduğunu kullanıcıya açıklamanız gerektiğini gösterir.
Kullanıcı geçmişte izin isteğini geri çevirdiyse ve izin istek sistemi iletişim kutusundaki Bir daha sorma seçeneğini belirlediyse, bu yöntem false değerini döndürür. Cihaz politikası uygulamanın bu izne sahip olmasını yasakladıysa da yöntem false değerini döndürür.
Kullanıcının "bir daha asla sorma" seçeneğini reddetmiş olup olmadığını bilmek için, kullanıcı izin vermediğinde onRequestPermissionsResult öğenizde shouldShowRequestPermissionRationale yöntemini tekrar kontrol edebilirsiniz .
@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...*/ ) {
}
}
}
}
}
Uygulama ayarınızı şu kodla açabilirsiniz:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
Kullanıcıyı doğrudan Yetkilendirme sayfasına göndermenin bir yolu yoktur.