Android Runtime Permission Kullanımı

Runtime Permission Mekanizması nedir ?

Android'in 6.0 Marshmallow sürümü ile birlikte gelen bu özellik, tüm uygulamaların Fotoğraf çekme, Dosyadan okuma/Dosyaya yazma, Rehbere erişim gibi aklınıza gelebilecek tüm uygulama izinlerini açıp kapatabilmenize olanak tanıyan Android'in güvenlik mekanizmasının bir parçasıdır.

6.0 sürümü öncesinde izinler, uygulamayı yükleme esnasında bir defa belirtilir seçme hakkı tanınmazdı onay vermezseniz uygulamayı yükleyemiyordunuz. Bu güvenlik ihlallerine sebebiyet veriyordu.

Şöyle ki;

  • İzinsiz kamerayı açma, fotoğraf çekme
  • Kullanıcıdan habersiz ses kaydetme
  • Rehberdeki kişileri yedekleme
  • Fotoğrafları bulut ortamına habersiz kaydetme

gibi kritik işlemleri kullanıcının haberi olmadan gerçekleştirebiliyorlar.

6.0 Permission Mekanizmasında ise durum şu;

Eğer bir uygulama Fotoğraf çekme özelliği kullanacaksa kamerayı ekranda göstermek istiyorsa, sizden varsayılan olarak kapalı olan Uygulama izinlerinden kamerayı açmanızı istemesi gerekiyor yada check permission metotları sayesinde size bir alertdialog ile kamerayı açma yada reddet gibi bir seçenek bulunan ekranı gösterip uygulama ayarlarına girmeden bu işlemi gerçekleştirmenizi beklemektedir.

6.0 öncesi sürümlerde(metot üst sürümlerde de çalışır) Uygulama ayarlarını açtırıp izinler kısmını görüntülemek;

private boolean checkPermission() {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_CONTACTS)) {
Toast.makeText(getActivity(), "Contact read permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", getActivity().getPackageName(), null)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, 1);
return false;
} else {
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 1);
return false;
}
}
return true;
}

Permission'larda kullandığımız PackageManager.PERMISSION_GRANTED burada izini verip vermediğimizi tespit edebilmek için kullanılıyor. Manifest.permission.READ_CONTACTS ise Rehberdeki kişileri okuyabilme iznidir.

Çokça kullanılabilecek izinlerden şuradan bulabilirsiniz > Manifest.permission;

İsteklerin yakalanlamasını sağlayan metot;

protected void requestLocationPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
android.Manifest.permission.READ_CONTACTS)) {
// izin alınmışsa yakılacak işlemler
}else{
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 123);
}
}

6.0 ve üzeri sürümlerde ise işlemler şöyle;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.READ_CONTACTS)
== PackageManager.PERMISSION_GRANTED) {
calistirilacakMetodunuz();
} else { //izin yoksa
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_CONTACTS},100); //istek kodunu 100 olarak belirttim
}
Bu makaleyi paylaşın:
İstanbul'da yaşıyorum.Web üzerinde Frontend/Backend Geliştirmenin yanı sıra, Android Geliştirme, PHP/ASP.NET, C# Yazılım Uzmanlığı ve Java konuları işliyorum. Kod Şiirdir, onları seviyorum.

Bir yorum bırakın