Android 10 (API düzeyi 29), kullanıcıların gizliliğini daha iyi korumak için çeşitli özellikler ve davranış değişiklikleri sunar. Bu değişiklikler, kullanıcıların verileri ve uygulamalara sağladıkları özellikler üzerindeki şeffaflığı ve kontrolü artırır. Bu özellikler, uygulamanızın bağlı olduğu belirli davranışların veya verilerin, platformun eski sürümlerine kıyasla farklı davranabileceği anlamına gelebilir. Uygulamanız kullanıcı verilerini işlemeyle ilgili mevcut en iyi uygulamaları izliyorsa bu durumun uygulamanız üzerindeki etkileri minimum düzeyde olacaktır.
Bu sayfada her bir değişikliğin bir özeti listelenir.
En iyi değişiklikler
Bu bölümde, Android 10'da gizlilikle ilgili önemli değişiklikler yer almaktadır.
Uygulama dosyaları ve medyaları kapsamındaki harici depolama erişimi
Varsayılan olarak, Android 10 ve sonraki sürümleri hedefleyen uygulamalara harici depolamaya kapsamlı erişim veya kapsamlı depolama alanı verilir. Bu tür uygulamalar, depolama alanıyla ilgili kullanıcı izinleri istemesine gerek kalmadan harici bir depolama cihazındaki aşağıdaki dosya türlerini görebilir:
getExternalFilesDir()
kullanılarak erişilen uygulamaya özel dizindeki dosyalar.- Uygulamanın medya mağazasından oluşturduğu fotoğraflar, videolar ve ses klipleri.
Kapsamlı depolamanın yanı sıra harici depolama cihazlarına kaydedilen dosyaları nasıl paylaşacağınız, değiştireceğiniz ve değiştireceğiniz hakkında daha fazla bilgi edinmek için harici depolama alanındaki dosyaları yönetme ve medya dosyalarına erişme ve dosyalarda değişiklik yapma kılavuzlarına göz atın.
Arka planda cihaz konumuna erişim için izin gerekiyor
Android 10'da, bir uygulamanın konum bilgilerine erişimi üzerinde kullanıcıların sahip olduğu ek kontrol olanağını desteklemek amacıyla Android 10'da ACCESS_BACKGROUND_LOCATION
izni kullanıma sunuldu.
ACCESS_FINE_LOCATION
ve ACCESS_COARSE_LOCATION
izinlerinin aksine ACCESS_BACKGROUND_LOCATION
izni, yalnızca arka planda çalışan bir uygulamanın konum erişimini etkiler. Aşağıdaki koşullardan biri sağlanmadığı sürece, uygulama arka planda konuma erişiyor olarak kabul edilir:
- Uygulamaya ait bir etkinlik görünür durumdadır.
Uygulama
location
ön plan hizmet türünü belirten bir ön plan hizmeti çalıştırıyor.Uygulamanızdaki bir hizmet için ön plan hizmet türünü beyan etmek üzere uygulamanızın
targetSdkVersion
veyacompileSdkVersion
değerini29
ya da daha yüksek bir değere ayarlayın. Ön plan hizmetlerinin, konuma erişim gerektiren kullanıcı tarafından başlatılan işlemlere nasıl devam edebileceği hakkında daha fazla bilgi edinin.
Uygulamanız coğrafi sınırlar oluşturup izliyor ve Android 10 (API düzeyi 29) veya sonraki sürümleri hedefliyorsa ACCESS_BACKGROUND_LOCATION
iznini beyan etmeniz gerekir.
Android 9 veya önceki sürümler hedeflenirken erişim izni otomatik olarak verildi
Uygulamanız Android 10 veya sonraki bir sürümde çalışıyor ancak Android 9 (API düzeyi 28) veya altını hedefliyorsa platform aşağıdaki davranışı uygular:
- Uygulamanız
ACCESS_FINE_LOCATION
veyaACCESS_COARSE_LOCATION
için bir<uses-permission>
öğesi tanımlarsa sistem, yükleme sırasındaACCESS_BACKGROUND_LOCATION
için otomatik olarak bir<uses-permission>
öğesi ekler. - Uygulamanız
ACCESS_FINE_LOCATION
veyaACCESS_COARSE_LOCATION
için istekte bulunursa sistem, isteğe otomatik olarakACCESS_BACKGROUND_LOCATION
ekler.
Cihaz Android 10 sürümüne geçirildiğinde erişim
Bir kullanıcı, ACCESS_COARSE_LOCATION
veya ACCESS_FINE_LOCATION
gibi uygulamanızın cihaz konumuna erişmesine izin verirse daha sonra cihazını Android 9'dan Android 10'a yükseltirse sistem, uygulamanıza verilen konuma dayalı izin grubunu otomatik olarak günceller. Yeni sürüme geçişten sonra uygulamanızın aldığı izin grubu, hedef SDK sürümüne ve aşağıdaki tabloda gösterildiği gibi tanımlanmış izinlere bağlıdır:
Tablo 1. Cihaz Android 10'a yükseltildikten sonra konum izni durumundaki değişiklikler
Hedef platform sürümü | Yoğun veya hassas izin verildi mi? |
Manifest'te arka plan izni tanımlanıyor mu? |
Varsayılan izin durumu güncellendi |
---|---|---|---|
Android 10 | Evet | Evet | Ön plan ve arka plan erişimi |
Android 10 | Evet | Hayır | Yalnızca ön plan erişimi |
Android 10 | Hayır | (Sistem tarafından yok sayıldı) | Erişim yok |
Android 9 veya önceki sürümler | Evet | Cihaz yeni sürüme geçirildiğinde sistem tarafından otomatik olarak eklenir | Ön plan ve arka plan erişimi |
Android 9 veya önceki sürümler | Hayır | (Sistem tarafından yok sayıldı) | Erişim yok |
Sistem, uygulamanızın cihaz konumuna erişimini otomatik olarak güncelledikten sonra bile kullanıcının bu erişim düzeyini değiştirebileceğini unutmayın. Örneğin, kullanıcı uygulamanızın yalnızca ön plana erişimini azaltabilir veya erişimi tamamen iptal edebilir. Özellikle bir ön plan hizmetinde olmak üzere cihazın konumuna erişmeyi denemeden önce uygulamanız, kullanıcının bu konum bilgilerini almasına hâlâ izin verip vermediğini kontrol etmelidir.
Android 10 cihazlarda hedef API düzeyi güncellenirken erişim iptal edildi
Uygulamanızın Android 10 çalıştıran bir cihazda zaten yüklü olduğu durumu düşünün. Bu durumda uygulamanızı Android 10'u hedefleyecek şekilde güncellerseniz cihaz, ACCESS_BACKGROUND_LOCATION
iznini iptal eder.
Uygulamanız arka plandayken cihazın konumunu nasıl alacağınız hakkında daha fazla bilgi için düzenli konum güncellemelerini alma rehberine bakın.
Etkinliklerin arka planda başlatılmasıyla ilgili kısıtlamalar
Android 10'dan itibaren sistem, etkinliklerin arka planda başlatılmasına kısıtlamalar uygular. Bu davranış değişikliği, kullanıcı için kesintileri en aza indirmeye ve kullanıcının ekranında gösterilenler üzerinde daha fazla kontrol sahibi olmasına yardımcı olur. Uygulamanız, doğrudan kullanıcı etkileşiminin bir sonucu olarak etkinlik başlattığı sürece bu kısıtlamalardan büyük olasılıkla etkilenmez.
Etkinlikleri arka plandan başlatmak yerine önerilen alternatifler hakkında daha fazla bilgi edinmek için uygulamanızdaki zamana duyarlı etkinlikler konusunda kullanıcıları nasıl uyaracağınız ile ilgili kılavuza bakın.
Tanımlayıcılar ve veriler
Bu bölümde, cihaz tanımlayıcıları ve verilerle çalışmaya özel değişiklikler listelenmiştir.
Kişilerin yakın ilgi alanını kaldırma
Android 10'dan itibaren platform, kişilerin yakın ilgi alanı bilgilerini izlemez. Sonuç olarak, uygulamanız kullanıcıların kişileri üzerinde arama yaparsa sonuçlar etkileşim sıklığına göre sıralanmaz.
ContactsProvider
hakkındaki kılavuz, Android 10'dan başlayarak tüm cihazlarda bulunan belirli alanların ve yöntemlerin açıklandığı bir bildirim içerir.
MAC adresi rastgele hale getirme
Android 10 veya sonraki sürümleri çalıştıran cihazlarda sistem, varsayılan olarak rastgele MAC adresleri iletir.
Uygulamanız bir kurumsal kullanım alanını işliyorsa platform MAC adresleriyle ilgili çeşitli işlemler için API'ler sağlar:
- Rastgele MAC adresi edinme: Cihaz sahibi uygulamaları ve profil sahibi uygulamaları,
getRandomizedMacAddress()
numarasını çağırarak belirli bir ağa atanmış rastgele MAC adresini alabilir. - Gerçek, fabrika MAC adresini alma: Cihaz sahibi uygulamaları,
getWifiMacAddress()
çağrısı yaparak cihazın gerçek donanım MAC adresini alabilir. Bu yöntem, cihaz filolarını izlemek için yararlıdır.
/proc/net dosya sistemine erişim kısıtlaması
Android 10 veya sonraki sürümleri çalıştıran cihazlarda, uygulamalar cihazın ağ durumuyla ilgili bilgileri içeren /proc/net
özelliğine erişemez. Bu bilgilere erişmesi gereken uygulamalar (ör. VPN'ler) NetworkStatsManager
veya ConnectivityManager
sınıfını kullanmalıdır.
Sıfırlanamayan cihaz tanımlayıcılarında kısıtlama
Android 10'dan itibaren uygulamaların hem IMEI hem de seri numarasını içeren sıfırlanamayan tanımlayıcılara erişebilmesi için READ_PRIVILEGED_PHONE_STATE
ayrıcalıklı iznine sahip olması gerekir.
Etkilenen yöntemler arasında şunlar bulunur:
Build
TelephonyManager
Uygulamanızın izni yoksa ve yine de sıfırlanamayan tanımlayıcılar hakkında bilgi sormayı denerseniz platformun yanıtı, hedef SDK sürümüne göre değişir:
- Uygulamanız Android 10 veya sonraki bir sürümü hedefliyorsa
SecurityException
simgesi görünür. - Uygulamanız Android 9 (API düzeyi 28) veya önceki sürümleri hedefliyorsa uygulama
READ_PHONE_STATE
iznine sahipse yöntemnull
veya yer tutucu verileri döndürür. Aksi takdirdeSecurityException
oluşur.
Çoğu kullanım alanında, sıfırlanamayan cihaz tanımlayıcılarına gerek yoktur. Örneğin, uygulamanız reklam izleme veya kullanıcı analizi için sıfırlanamayan cihaz tanımlayıcıları kullanıyorsa bunun yerine bu belirli kullanım alanları için Android Reklam Kimliği kullanın. Daha fazla bilgi edinmek için benzersiz tanımlayıcılarla ilgili en iyi uygulamaları inceleyin.
Pano verilerine sınırlı erişim
Uygulamanız, varsayılan giriş yöntemi düzenleyici (IME) değilse veya şu anda odak noktası olan uygulama değilse Android 10 veya sonraki sürümlerde pano verilerine erişemez.
USB cihaz seri numarasının korunması
Uygulamanız Android 10 veya sonraki bir sürümü hedefliyorsa kullanıcı uygulamanıza USB cihazına veya aksesuarına erişim izni verene kadar uygulamanız seri numarasını okuyamaz.
USB cihazlarıyla çalışma hakkında daha fazla bilgi edinmek için USB ana makinelerini yapılandırma ile ilgili kılavuza bakın.
Kamera ve bağlantı
Bu bölümde kamera meta verilerine ve bağlantı API'lerine özgü değişiklikler listelenmiştir.
Kamera ayrıntılarına ve meta verilere erişim kısıtlaması
Android 10, getCameraCharacteristics()
yönteminin varsayılan olarak döndürdüğü bilgi kapsamını değiştirir. Özellikle, bu yöntemin döndürdüğü değerde yer alan, cihaza özel potansiyel olarak meta verilere erişmek için uygulamanızın CAMERA
iznine sahip olması gerekir.
Bu değişiklikler hakkında daha fazla bilgi edinmek için izin gerektiren kamera alanları hakkındaki bölüme bakın.
Kablosuz bağlantıyı etkinleştirme ve devre dışı bırakmayla ilgili kısıtlama
Android 10 veya sonraki sürümleri hedefleyen uygulamalar, kablosuz bağlantıyı etkinleştiremez veya devre dışı bırakamaz. WifiManager.setWifiEnabled()
yöntemi her zaman false
değerini döndürür.
Kullanıcılardan kablosuz bağlantıyı etkinleştirmelerini ve devre dışı bırakmalarını istemeniz gerekiyorsa bir ayarlar paneli kullanın.
Yapılandırılmış kablosuz ağlara doğrudan erişimle ilgili kısıtlamalar
Kullanıcı gizliliğini korumak amacıyla, kablosuz ağ listesinin manuel olarak yapılandırılması sistem uygulamaları ve cihaz politikası denetleyicileri (DPC'ler) ile sınırlandırılmıştır. Belirli bir DPC, cihazın sahibi veya profilin sahibi olabilir.
Uygulamanız Android 10 veya sonraki bir sürümü hedefliyorsa ve bir sistem uygulaması ya da DPC değilse aşağıdaki yöntemler yararlı veriler döndürmez:
getConfiguredNetworks()
yöntemi her zaman boş bir liste döndürür.Tam sayı değeri (
addNetwork()
veupdateNetwork()
) döndüren her ağ işlemi yöntemi her zaman -1 döndürür.Boole değeri döndüren her ağ işlemi (
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
vedisconnect()
) her zamanfalse
değerini döndürür.
Uygulamanızın kablosuz ağlara bağlanması gerekiyorsa aşağıdaki alternatif yöntemleri kullanın:
- Bir kablosuz ağa anında yerel bağlantı tetiklemek için standart bir
NetworkRequest
nesnesindeWifiNetworkSpecifier
kullanın. - Kullanıcıya internet erişimi sağlamak amacıyla kablosuz ağlar eklemek için
WifiNetworkSuggestion
nesneleriyle çalışın.addNetworkSuggestions()
veremoveNetworkSuggestions()
çağrılarını sırasıyla yaparak ağ seçimi iletişim kutusunda görünen ağları ekleyip kaldırabilirsiniz. Bu yöntemler konum izni gerektirmez.
Bazı telefon, Bluetooth ve kablosuz ağ API'leri için FINE konum izni gerekir
Uygulamanız Android 10 veya sonraki bir sürümü hedefliyorsa kablosuz, kablosuz ağa duyarlı veya Bluetooth API'lerinde çeşitli yöntemleri kullanabilmesi için ACCESS_FINE_LOCATION
iznine sahip olması gerekir. Etkilenen sınıflar ve yöntemler aşağıdaki bölümlerde listelenmiştir.
Telefon
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Kablosuz ağlar
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
İzinler
Bu bölümde, Android izin modelinde yapılan güncellemeler açıklanmaktadır.
Ekran içeriklerine kısıtlı erişim
Android 10, kullanıcıların ekran içeriklerini korumak için READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
ve CAPTURE_SECURE_VIDEO_OUTPUT
izinlerinin kapsamını değiştirerek cihazın ekran içeriklerine sessiz erişimi engeller. Android 10 sürümünden itibaren bu izinler yalnızca imzala erişim izni vermektedir.
Cihazın ekran içeriklerine erişmesi gereken uygulamaların, kullanıcıdan izin vermesini isteyen bir istem görüntüleyen MediaProjection
API'sini kullanması gerekir.
Eski uygulamalarda kullanıcılara yönelik izin kontrolü
Uygulamanız Android 5.1 (API düzeyi 22) veya önceki sürümleri hedefliyorsa kullanıcılar Android 10 veya sonraki sürümleri çalıştıran bir cihazda uygulamanızı ilk kez kullanırken Şekil 1'de gösterildiği gibi bir izinler ekranı görürler. Bu ekran kullanıcılara, sistem tarafından daha önce yükleme sırasında uygulamanıza verdiği izinlere erişimi iptal etme olanağı sunar.
Fiziksel aktivite tanıma
Android 10'da, kullanıcının adım sayısını algılaması veya yürüme, bisiklete binme ya da araçta gezinme gibi fiziksel aktivitelerini sınıflandırması gereken uygulamalar için android.permission.ACTIVITY_RECOGNITION
çalışma zamanı izni sunuluyor. Bu özellik, kullanıcılara cihaz sensörü verilerinin Ayarlar'da nasıl kullanıldığını göstermek için tasarlanmıştır.
Google Play Hizmetleri'nde bulunan Activity Recognition API ve Google Fit API gibi bazı kitaplıklar, kullanıcı uygulamanıza bu izni vermedikçe sonuç sağlamaz.
Cihazda bu izni beyan etmenizi gerektiren tek yerleşik sensörler adım sayacı ve adım dedektörü sensörleridir.
Uygulamanız Android 9 (API düzeyi 28) veya önceki sürümleri hedefliyorsa uygulamanız aşağıdaki koşulların her birini karşılıyorsa sistem gerektiğinde uygulamanıza otomatik olarak android.permission.ACTIVITY_RECOGNITION
izni verir:
- Manifest dosyası
com.google.android.gms.permission.ACTIVITY_RECOGNITION
iznini içerir. - Manifest dosyası
android.permission.ACTIVITY_RECOGNITION
iznini içermez.
Sistem tarafından android.permission.ACTIVITY_RECOGNITION
izni otomatik olarak verilirse uygulamanızı Android 10'u hedefleyecek şekilde güncellemenizin ardından uygulamanız bu izni korur. Ancak, kullanıcı bu izni sistem ayarlarından istediği zaman iptal edebilir.
İzin grupları kullanıcı arayüzünden kaldırıldı
Android 10'dan itibaren uygulamalar, kullanıcı arayüzünde izinlerin nasıl gruplandırıldığını arayamaz.