Android 6.0 Marshmallow Sürümünde İzin İşlemleri Yapmak

Merhabalar.. Bu makalede sizlere forumlarda sık sık karşılaştığımız bir konuyu, Android 6.0 Marshmallow Sürümünde ki yeni güvenlik önlemleri nedeniyle gelen Uygulama çalışırken alınan izinler (Run Time Permissions) konusunu anlatacağım.

Bilenler bilir.. Önceki sürümlerde Android izinlerini AndroidManifest.xml dosyasında belirtmek bizim için yeterliydi.

Play Store‘dan herhangi bir uygulama yüklemek istediğinizde şu şekilde bir pencere ile karşılaşırsınız.
Screenshot_2016-03-08-14-51-16-1

Bu pencerede listede bulunan izinler AndroidManifest.xml dosyasında belirtilmiş izinlerdir. Yani aslında Play Store, ilgili uygulamayı yüklemeden önce yüklediğimiz uygulamanın telefonumuzda nelere erişmek istediği hakkında bilgi vermektedir. Fakat biz genelde uygulamayı indirirken bu listeye hiç dikkat etmeyiz 🙂

Yani Android 6.0 dan önce yüklediğimiz herhangi bir uygulama bizim kişisel bilgilerimizi, konumumuzu, özel dosyalarımızı v.b. bilgileri bize hiç çaktırmadan alabilir, ve bizim ruhumuz bile duymaz 🙂

Bu gibi durumların yaşanmaması adına Android 6.0 sürümünde uygulamanın erişmek istediği izinlere sınırlandırma getirilmiş olup, bazı kritik izinler alınırken AndroidManifest.xml‘in dışında kullanıcınında onaylaması şartı getirilmiştir.  Bu kullanıcı onayı gerektiren izinler Run Time Permissions olarak adlandırılmaktadır.

Bu izinlerin tam listesi için :
http://developer.android.com/intl/ja/guide/topics/security/permissions.html#normal-dangerous

 

Bu izinleri alabilmemiz için yapmamız gereken işlemleri sıralayacak olursak :

1 – Almak istediğimiz izni AndroidManifest.xml ‘de belirtmek :

Bu kısımı Android ile ilgilenen hemen hemen herkes biliyordur sanırım. Ben örnek olması açısından SD Kart üzerinde okuma ve yazma işlemi yapabilmek için gerekli olan izinleri alacağım.

2 – AndroidManifest.xml’de belirtilen iznin daha önceden kullanıcı tarafından onaylanıp onaylanmadığını kontrol etmek : 

  • İzin kontrolu yaparken ilk olarak almak istediğimiz izinleri bir String dizisi içinde tanımlamalıyız. Çünkü izin isteği yaparken bu dizi içindeki izinler dikkate alınacaktır.

  • Yapacağımız izin isteğine özgü bir tam sayı değeri belirlemeliyiz. Bu tam sayı değeri sayesinde aldığımız iznin kabul edilip edilmediğini kontrol edeceğiz. Eğer uygulama içinde farklı yerlerde farklı Manifest izinleri almamız gerekiyorsa; her izin alma işlemine farklı bir tam sayı değeri belirlememiz gerekmektedir. (67 = Zonguldak’ın plaka kodu 🙂 )

  • AndroidManifest.xml’de ve String dizisi içinde tanımlamış olduğumuz izinlerin daha önceden onaylanıp onaylanmadığını kontrol ediyoruz. Bu işlemi yaparken ilk olarak bizde yüklü olan Android SDK sürümünün Android 6.0 dan küçük olup olmadığını kontrol ediyoruz. Netice de daha önceki sürümlerde uygulama içinde izin alma durumu söz konusu değildir.

3 – Yapılan izin isteği sonucunda kullanıcının onaylaması/onaylamaması durumunda yapılacak işlemleri belirlemek :

  • İzin işleminin nasıl sonuçlandığını yönetebilmek için onRequestPermissionsResult() metodunu implement/Override etmemiz gerekmektedir.

 

3 aşamada anlattığım izin isteme işlemi sonucunda oluşan kodun tamamı şu şekildedir:

Kodları kendinize göre düzenleyip projenize ekledikten sonra IzinKontrolEt() metodunu çalıştırmanız yeterli olacaktır.

Konuyla ilgili merak ettiklerinizi yorum olarak belirtebilirsiniz..

Happy Codings.. 🙂



You may also like...

13 Responses

  1. nazlı dedi ki:

    benim telefonumda son zamanlarda bi hata beliriyor ve kamerayı vs kullanılmaz hale getiriyor, okuma/yazma modunda veritabanı açılamıyormuş. manifest dosyasından bu izinleri vermem gerek galiba ama o dosyaya nasıl erişebilirim acaba? Teşekkürler.

  2. Umut ONUR dedi ki:

    Merhabalar..
    Eğer telefonunuzda sistemsel bir hata varsa bu durumda tek seçeneğiniz var, oda telefonu servise göndermek..

    Fakat duru böyle değil de sadece tek bir Uygulamayı kullanırken sorun yaşıyorsanız, buda sizin müdahale edebilmeniz mümkün değildir. Uygulamanın geliştiricisi ancak bu hatayı düzeltebilir..

  3. Nurullah dedi ki:

    Teşekkürler

  4. Fatih kapağan dedi ki:

    Umut bey merhaba. Galaxy note 4 (n910F) cihazımı rootladım. üzerinde marshmallow 6.01 sürüm var. fakat sd karta yazma izni veremiyorum. Bunu yapacak bir uygulama paketi yokmu acaba? marketteki sdkart fix uygulamaları çalışmıyor.
    Yardımcı olursanız çok sevinirim. iyi günler

    • Umut ONUR dedi ki:

      Merhaba Fatih.
      Öncelikle makalede anlatılanlar bir Android Uygulaması Programlarken yazılan uygulamada izinlerin nasıl alındığıyla ilgilidir.
      Yani cihazınızın modelinden yada rootlu olup olmamasından bağımsız bir durumdur.

      Bahsettiğiniz konuyla alakalı olarak; başka hafıza kartlarında da denemenizi öneririm. Eğer başka hafıza kartlarına da birşeyler yazamıyorsanız bu işletim sistemiyle alakalı bir durum olabilir.

  5. Fatih kapağan dedi ki:

    Ok. Teşekkürler.

  6. iyi günler umut bey, ben şuan bi uygulama yapıyorum ancak ben manifest dosyasına izinleri ekliyorum ancak uygulamayı ilk yüklediğimde çalıştırıken durduruldu diyor. uygulama çalışması için uygulama yöneticisine girip uygulamaya izin veriyorum ondan sonra program çalışıyor. Telefonumun android sürümü 6.0.1

    • Umut ONUR dedi ki:

      Merhaba Türkay.
      Şimdi anlayamadığım bazı noktalar var.
      1 – Sadece Manifest.xml dosyasına ekleme yaparak mı izin alıyorsun yoksa izinleri (makalede anlattığım gibi) gerçek zamanlı olarak ta alıyor musun?
      2 – Almaya çalıştığın izinler; yukarıda belirtmiş olduğum linkteki izinler listesi arasında yer alıyor mu?
      3 – Android Studio yada başka bir IDE kullanarak kodladığın uygulama Emulator’de çalışıyor mu ?

  7. Oguzhan dedi ki:

    Slm bende ekran yer paylaşımını açınız diyor ama olmuyor

  8. Alihan dedi ki:

    Umut kardesim cok tesekkurler cok iyi bi anlatım olmus sonunda bu sorunumuda cozdum

  9. Atakan Ulusoy dedi ki:

    Umut Bey, Maalesef ki.

    sadece bu satırları manifest dosyasına yazıyorum ama programı yüklerken uygulama şu izinleri almak istiyor diye bir uyarı çıkmıyor..

    Min SDK 16 yapıyorum.
    Compile SDK 24

    Android sdk kullanıyorum ama sadece manifest dosyasına yukaridaki satırları yazmak yeterli değil mi? extra tehlikeli izinleri almaktan bahetmiyorum basit SMS atma izni mesela.

  10. Atakan Ulusoy dedi ki:

    Sadece Manifest dosyasından izin almak yeterli değilmidir? extra özel bir izin istemiyorum mesela Mesaj atma izini almak için sadece manifest dosyasına

    yazmak yeterlimidir?

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.