checkSelfPermission metodu
Şöyle yaparız.
Açıklaması şöyle
Tam kullanım şekli şöyle
Şöyle yaparız.
Örnek
Şöyle yaparız.
Verilen dizi şöyle olabilir.
Activity onRequestPermissionsResult metodu
Örnek
Şöyle yaparız
Eğer birden fazla izin istediysek cevap istenilen sırada gelir. Şöyle yaparız.
Bazı kodlarda switch'ten önce super() çağrısı yapılıyor. Şöyle yaparız.
Şöyle yaparız.
if (ActivityCompat.checkSelfPermission(contexts,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED {
...
}
shouldShowRequestPermissionRationale metoduAçıklaması şöyle
Eğer uygulama 2. kez çalıştırılıyorsa ve kullanıcı "Never Ask Again" seçeneğini işaretlemeden sadece Deny seçeneğini seçtiyse true döner. Yani geçmişte bir seferlik izin vermemiştir ve bu sefer uygulama tam gerekçesini belirtiyordur.shouldShowRequestPermissionRationale return the boolean indicating whether or not we should show UI with rationale for requesting a permission (dangerous permission, ACCESS_FINE_LOCATION)
Tam kullanım şekli şöyle
if (ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
//Show an explanation
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
ÖrnekŞöyle yaparız.
if (ActivityCompat.shouldShowRequestPermissionRationale (MainActivity.this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(MainActivity.this, "Allow permissions", Toast.LENGTH_LONG).show();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_REQUEST_CODE);
}
}
requestPermissions metoduÖrnek
Şöyle yaparız.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_READ_STORAGE_REQUEST_CODE);
ÖrnekVerilen dizi şöyle olabilir.
new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION};
DiğerActivity onRequestPermissionsResult metodu
Örnek
Şöyle yaparız
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case MY_REQUEST_CODE:
if (grantResults.length > 0) {
boolean writeExternalFile = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (writeExternalFile) {
} else {
Toast.makeText(MainActivity.this, "Allow permission", Toast.LENGTH_LONG).show();
}
}
break;
}
}
ÖrnekEğer birden fazla izin istediysek cevap istenilen sırada gelir. Şöyle yaparız.
if (grantResults.length > 0) {
boolean ReadSMS = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean ReceiveSms = grantResults[1] == PackageManager.PERMISSION_GRANTED;
boolean phoneState = grantResults[2] == PackageManager.PERMISSION_GRANTED;
boolean outGoingCall = grantResults[3] == PackageManager.PERMISSION_GRANTED;
boolean internet = grantResults[4] == PackageManager.PERMISSION_GRANTED;
boolean bootComplete = grantResults[5] == PackageManager.PERMISSION_GRANTED;
boolean readExternalStorage = grantResults[6] == PackageManager.PERMISSION_GRANTED;
boolean WriteExternalStorage = grantResults[7] == PackageManager.PERMISSION_GRANTED;
if (ReadSMS && ReceiveSms && phoneState && outGoingCall && internet && ...) {
Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_LONG).show();
}
}
ÖrnekBazı kodlarda switch'ten önce super() çağrısı yapılıyor. Şöyle yaparız.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
...
}
}