31 Ekim 2017 Salı

ActivityCompat Sınıfı

checkSelfPermission metodu
Şöyle yaparız.
if (ActivityCompat.checkSelfPermission(contexts,
  Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED {
  ...
}
shouldShowRequestPermissionRationale metodu
Açıklaması şöyle
shouldShowRequestPermissionRationale return the boolean indicating whether or not we should show UI with rationale for requesting a permission (dangerous permission, ACCESS_FINE_LOCATION)
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.
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);
Örnek
Verilen dizi şöyle olabilir.
new String[]{
  Manifest.permission.WRITE_EXTERNAL_STORAGE,
  Manifest.permission.CAMERA,
  Manifest.permission.ACCESS_COARSE_LOCATION,
  Manifest.permission.ACCESS_FINE_LOCATION};
Diğer
Activity 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;
    }
}
Örnek
Eğ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();
  }
}
Örnek
Bazı 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)
  {
    ...
  }
}