Android 11, kullanıcılara konum, mikrofon ve kamera için daha ayrıntılı izinler belirleme olanağı sunar. Ayrıca sistem, Android 11 veya sonraki sürümleri hedefleyen kullanılmayan uygulamaların izinlerini sıfırlar. Uygulamaların, sistem uyarı penceresini kullanmaları veya telefon numaralarıyla ilgili bilgileri okumaları durumunda beyan ettikleri izinleri güncellemeleri gerekebilir.
Tek seferlik izinler
Android 11'den itibaren, uygulamanız konum, mikrofon veya kamerayla ilgili bir izin istediğinde kullanıcılara yönelik izinler iletişim kutusunda Yalnızca bu sefer adlı bir seçenek gösterilir. Kullanıcı iletişim kutusunda bu seçeneği belirlerse uygulamanıza geçici bir tek seferlik izin verilir.
Sistemin tek seferlik izinleri nasıl işlediği hakkında daha fazla bilgi edinin.
Kullanılmayan uygulamaların izinlerini otomatik olarak sıfırlama
Uygulamanız Android 11 veya sonraki sürümleri hedefliyorsa ve birkaç ay boyunca kullanılmazsa sistem, kullanıcının uygulamanıza verdiği hassas çalışma zamanında istenen izinleri otomatik olarak sıfırlayarak kullanıcı verilerini korur. Bu işlem, kullanıcının sistem ayarlarında bir izni görüntüleyip uygulamanızın erişim düzeyini Reddet olarak değiştirmesiyle aynı etkiye sahiptir. Uygulamanız çalışma zamanında izin isteme ile ilgili en iyi uygulamalardan yararlanıyorsa uygulamanızda herhangi bir değişiklik yapmanız gerekmez. Bunun nedeni, kullanıcı uygulamanızdaki özelliklerle etkileşimde bulunurken özelliklerin ihtiyaç duydukları izinlere sahip olduğunu doğrulamanız gerekmesidir.
Sistemin kullanılmayan uygulamaların izinlerini otomatik olarak nasıl sıfırladığı hakkında daha fazla bilgi edinin.
İzin iletişim kutusu görünürlüğü
Android 11'den itibaren, uygulamanızın bir cihazda yüklü olduğu süre boyunca kullanıcı belirli bir izin için birden fazla kez Reddet'e dokunursa uygulamanız bu izni tekrar istediğinde kullanıcı sistem izinleri iletişim kutusunu görmez. Kullanıcının işlemi "bir daha sorma" anlamına gelir. Önceki sürümlerde, kullanıcı daha önce "tekrar sorma" onay kutusunu veya seçeneğini işaretlemediği sürece uygulamanız her izin istediğinde sistem izinleri iletişim kutusu gösteriliyordu. Android 11'deki bu davranış değişikliği, kullanıcıların reddetmeyi seçtiği izinler için tekrarlanan istekleri engeller.
Bir uygulamanın izinlerinin kalıcı olarak reddedilip reddedilmediğini belirlemek için (hata ayıklama ve test amacıyla) aşağıdaki komutu kullanın:
adb shell dumpsys package PACKAGE_NAME
Buradaki PACKAGE_NAME, incelenecek paketin adıdır.
Komutun çıkışı aşağıdaki gibi görünen bölümler içerir:
... runtime permissions: android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] ...
Kullanıcı tarafından bir kez reddedilen izinler USER_SET ile işaretlenir.
İki kez Reddet seçilerek kalıcı olarak reddedilen izinler USER_FIXED ile işaretlenir.
Test sırasında, test kullanıcılarının istek iletişim kutusu gösterilmediğinde şaşırmaması için bu işaretleri sıfırlamak isteyebilirsiniz. Bunun için aşağıdaki komutu kullanın:
adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed
PERMISSION_NAME, sıfırlamak istediğiniz iznin adıdır. Android uygulama izinlerinin tam listesini görüntülemek için izinler API referans sayfasını ziyaret edin.
Uygulamanızda izin reddini nasıl ele alacağınız hakkında daha fazla bilgi edinin.
Sistem uyarı penceresi değişiklikleri
Android 11, uygulamalara SYSTEM_ALERT_WINDOW izninin verilme şeklinde çeşitli değişiklikler yapar. Bu değişiklikler, izin verme işlemini daha bilinçli hale getirerek kullanıcıları korumayı amaçlar.
Belirli uygulamalara, istek üzerine otomatik olarak SYSTEM_ALERT_WINDOW izni verilir.
Belirli uygulama sınıflarına, istek üzerine otomatik olarak SYSTEM_ALERT_WINDOW izni verilir:
ROLE_CALL_SCREENINGözelliğine sahip olan veSYSTEM_ALERT_WINDOWizni isteyen tüm uygulamalara otomatik olarak izin verilir. UygulamaROLE_CALL_SCREENINGözelliğini kaybederse izni de kaybeder.MediaProjectionaracılığıyla ekranı yakalayan veSYSTEM_ALERT_WINDOWisteğinde bulunan tüm uygulamalara, kullanıcı uygulamaya açıkça izin vermeyi reddetmediği sürece otomatik olarak izin verilir. Uygulama ekranı yakalamayı durdurduğunda izni kaybeder. Bu kullanım alanı öncelikli olarak oyun canlı yayın uygulamaları için tasarlanmıştır.
Bu uygulamaların SYSTEM_ALERT_WINDOW iznini almak için ACTION_MANAGE_OVERLAY_PERMISSION göndermesi gerekmez. Uygulamalar doğrudan SYSTEM_ALERT_WINDOW izni isteyebilir.
MANAGE_OVERLAY_PERMISSION intent'leri, kullanıcıyı her zaman sistem izinleri ekranına yönlendirir.
Android 11'den itibaren,
ACTION_MANAGE_OVERLAY_PERMISSION
intent'ler kullanıcıyı her zaman üst düzey Ayarlar ekranına yönlendirir. Kullanıcı, bu ekranda uygulamalar için
SYSTEM_ALERT_WINDOW
izinlerini verebilir veya iptal edebilir. Amaçtaki tüm package: verileri yoksayılır.
Android'in önceki sürümlerinde ACTION_MANAGE_OVERLAY_PERMISSION intent'i, kullanıcıyı izni yönetmek için uygulamaya özel bir ekrana yönlendiren bir paket belirtebiliyordu. Bu işlev, Android 11'den itibaren desteklenmemektedir. Bunun yerine, kullanıcının önce izin vermek veya izni iptal etmek istediği uygulamayı seçmesi gerekir. Bu değişiklik, izin verme işlemini daha bilinçli hale getirerek kullanıcıları korumayı amaçlamaktadır.
Telefon numaraları
Android 11, uygulamanızın telefon numaralarını okurken kullandığı telefonla ilgili izni değiştirir.
Uygulamanız Android 11 veya sonraki sürümleri hedefliyorsa ve aşağıdaki listede gösterilen telefon numarası API'lerine erişmesi gerekiyorsa READ_PHONE_STATE izni yerine READ_PHONE_NUMBERS iznini istemeniz gerekir.
- Hem
TelephonyManagersınıfındaki hem deTelecomManagersınıfındakigetLine1Number()yöntemi. TelephonyManagersınıfında desteklenmeyengetMsisdn()yöntemi.
Uygulamanız önceki listede yer alanlar dışındaki yöntemleri çağırmak için READ_PHONE_STATE iznini beyan ediyorsa tüm Android sürümlerinde READ_PHONE_STATE iznini istemeye devam edebilirsiniz. Ancak READ_PHONE_STATE iznini yalnızca önceki listedeki yöntemler için kullanıyorsanız manifesto dosyanızı aşağıdaki gibi güncelleyin:
- Uygulamanızın izni yalnızca Android 10 (API düzeyi 29) ve önceki sürümlerde kullanması için
READ_PHONE_STATEbeyanınızı değiştirin. READ_PHONE_NUMBERSiznini ekleyin.
Aşağıdaki manifest beyanı snippet'i bu süreci göstermektedir:
<manifest> <!-- Grants the READ_PHONE_STATE permission only on devices that run Android 10 (API level 29) and lower. --> <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> </manifest>
Ek kaynaklar
Android 11'deki izin değişiklikleri hakkında daha fazla bilgi için aşağıdaki materyalleri inceleyin:
Videolar
Android 11'deki en son gizlilik değişiklikleriyle geliştirme yapma