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 sundukları özellikler üzerinde sahip oldukları şeffaflığı ve kontrolü artırıyor. 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 uygulamalara uyuyorsa uygulamanız üzerinde çok az etki olacaktır.
Bu sayfada her bir değişikliğin ö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 medyayla sınırlı harici depolama alanı erişimi
Varsayılan olarak, Android 10 ve sonraki sürümleri hedefleyen uygulamalara harici depolama alanı için kapsamlı erişim veya kapsamlı depolama alanı verilir. Bu tür uygulamalar, depolama alanıyla ilgili kullanıcı izinleri istemek zorunda kalmadan harici 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ında oluşturduğu fotoğraflar, videolar ve ses klipleri.
Kapsamlı depolama alanı ve harici depolama cihazlarına kaydedilen dosyaların nasıl paylaşılacağı, bunlara nasıl erişileceği ve değiştirileceği hakkında daha fazla bilgi edinmek için harici depolama alanındaki dosyaları yönetme ve medya dosyalarına erişme ve bunları değiştirme ile ilgili kılavuzları inceleyin.
Arka planda cihaz konumuna erişim için izin gerekir
Android 10, kullanıcıların bir uygulamanın konum bilgilerine erişimi üzerinde sahip olduğu ek kontrolü desteklemek için ACCESS_BACKGROUND_LOCATION
iznini kullanıma sunar.
ACCESS_FINE_LOCATION
ve ACCESS_COARSE_LOCATION
izinlerinin aksine ACCESS_BACKGROUND_LOCATION
izni, yalnızca uygulamanın arka planda çalışırken konuma erişimini etkiler. Aşağıdaki koşullardan biri karşılanmadığı sürece, bir uygulamanın arka planda konuma eriştiği kabul edilir:
- Uygulamaya ait bir etkinlik görünür.
Uygulama,
location
ön plan hizmet türü bildiren 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
veya daha yüksek bir değere ayarlayın. Ön plan hizmetlerinin, konuma erişimi gerektiren kullanıcı tarafından başlatılan işlemleri devam ettirme 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 hedeflendiğinde erişim otomatik olarak verildi
Uygulamanız Android 10 veya sonraki sürümleri çalıştırıyor ancak Android 9 (API düzeyi 28) veya önceki sürümleri hedefliyorsa platform aşağıdaki davranışı uygular:
- Uygulamanız
ACCESS_FINE_LOCATION
veyaACCESS_COARSE_LOCATION
için<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
isteğinde bulunursa sistem, isteğe otomatik olarakACCESS_BACKGROUND_LOCATION
ekler.
Cihaz Android 10'a yükseltildiğinde erişim
Bir kullanıcı, uygulamanıza cihaz konumuna erişim izni verirse (ACCESS_COARSE_LOCATION
veya ACCESS_FINE_LOCATION
) ve ardından cihazını Android 9'dan Android 10'a yükseltirse sistem, uygulamanıza verilen konuma dayalı izin grubunu otomatik olarak günceller. Uygulamanızın yükseltme işleminden sonra aldığı izin grubu, aşağıdaki tabloda gösterildiği gibi hedef SDK sürümüne ve tanımlanmış izinlerine bağlıdır:
Hedef platform sürümü | Kaba veya hassas izin verildi mi? |
Arka plan izni manifest dosyasında tanımlanmış mı? |
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 planda erişim |
Android 10 | Hayır | (Sistem tarafından yoksayılır) | Erişim yok |
Android 9 veya önceki sürümler | Evet | Cihaz yükseltme sırasında 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 yoksayılır) | 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 ön plana erişimini yalnızca ön plana indirebilir veya erişimi tamamen iptal edebilir. Uygulamanız, özellikle ön plan hizmetindeyken cihazın konumuna erişmeye çalışmadan önce kullanıcının uygulamanızın bu konum bilgilerini almaya devam edip etmediğ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 yüklü olduğunu varsayalım. 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 edinmek için düzenli olarak konum güncellemeleri alma rehberine bakın.
Arka planda etkinlik başlatmayla ilgili kısıtlamalar
Android 10'dan itibaren sistem, etkinlikleri arka planda başlatmaya kısıtlamalar getiriyor. Bu davranış değişikliği, kullanıcının kesintiye uğramasını en aza indirmeye yardımcı olur ve kullanıcının ekranında gösterilenlerle ilgili daha fazla kontrole sahip olmasını sağlar. Uygulamanız, kullanıcı etkileşiminin doğrudan bir sonucu olarak etkinlikler başlattığı sürece büyük olasılıkla bu kısıtlamalardan etkilenmez.
Etkinlikleri arka planda başlatmanın önerilen alternatifi hakkında daha fazla bilgi edinmek için uygulamanızda kullanıcıları zamana duyarlı olaylar konusunda 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 verileriyle çalışmaya özel değişiklikler listelenmiştir.
Kişi yakınlığı kaldırıldı
Android 10'dan itibaren platform, kişi yakınlık bilgilerini takip etmez. Bunun sonucunda, uygulamanız kullanıcının kişilerinde arama yaparsa sonuçlar etkileşim sıklığına göre sıralanmaz.
ContactsProvider
ile ilgili kılavuz, Android 10'dan başlayan tüm cihazlarda geçerli olmayan belirli alanlar ve yöntemleri açıklayan bir bildirim içerir.
MAC adresinin rastgele seçilmesi
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ında çalışıyorsa platform, MAC adresleriyle ilgili çeşitli işlemler için API'ler sağlar:
- Rastgele MAC adresi alma: Cihaz sahibi uygulamaları ve profil sahibi uygulamaları,
getRandomizedMacAddress()
çağrısı yaparak belirli bir ağa atanan rastgele MAC adresini alabilir. - Gerçek fabrika MAC adresini alma: Cihaz sahibi uygulamaları,
getWifiMacAddress()
çağrısını 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
alanına erişemez. VPN'ler gibi bu bilgilere erişmesi gereken uygulamalar NetworkStatsManager
veya ConnectivityManager
sınıfını kullanmalıdır.
Sıfırlanamayan cihaz tanımlayıcıları için kısıtlama
Android 10'dan itibaren uygulamaların, cihazın sıfırlanamayan tanımlayıcılarına (hem IMEI hem de seri numarasını içeren) erişebilmesi için READ_PRIVILEGED_PHONE_STATE
ayrıcalıklı izne sahip olması gerekir.
Etkilenen yöntemler şunlardır:
Build
TelephonyManager
Uygulamanızda bu izin yoksa ve sıfırlanamayan tanımlayıcılarla ilgili bilgi istemeyi denerseniz platformun yanıtı, hedef SDK sürümüne göre değişir:
- Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa
SecurityException
oluşur. - Uygulamanız Android 9'u (API düzeyi 28) veya daha eski sürümleri hedefliyorsa yöntem, uygulamada
READ_PHONE_STATE
izni varsanull
veya yer tutucu veriler döndürür. Aksi takdirdeSecurityException
oluşur.
Birçok 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 amacıyla sıfırlanamayan cihaz tanımlayıcıları kullanıyorsa bu belirli kullanım alanları için Android reklam kimliği kullanın. Daha fazla bilgi edinmek için benzersiz tanımlayıcılar için en iyi uygulamalara bakın.
Pano verilerine sınırlı erişim
Uygulamanız varsayılan giriş yöntemi düzenleyicisi (IME) veya şu anda odaklanılan uygulama değilse Android 10 ya da sonraki sürümlerde pano verilerine erişemez.
USB cihaz seri numarasının korunması
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa kullanıcı, uygulamanıza USB cihaza veya aksesuara erişme izni verene kadar uygulamanız seri numarasını okuyamaz.
USB cihazlarla çalışma hakkında daha fazla bilgi edinmek için USB ana makinelerini yapılandırma başlıklı kılavuzu inceleyin.
Kamera ve bağlantı
Bu bölümde, kamera meta verilerine ve bağlantı API'lerine özgü değişiklikler listelenmektedir.
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önüş değerine dahil edilen cihaza özgü olabilecek 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ı ile ilgili 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 ağ bağlantısını 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şim kısıtlamaları
Kullanıcı gizliliğini korumak için kablosuz ağ listesinin manuel yapılandırılması sistem uygulamaları ve cihaz politikası denetleyicileri (DPC) ile sınırlandırılmıştır. Belirli bir DPC, cihaz sahibi veya profil sahibi olabilir.
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa ve bir sistem uygulaması ya da DPC değilse aşağıdaki yöntemler faydalı veriler döndürmez:
getConfiguredNetworks()
yöntemi her zaman boş bir liste döndürür.Tam sayı döndüren her ağ işlemi yöntemi (
addNetwork()
veupdateNetwork()
) her zaman -1 döndürür.Bir boole değeri (
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
vedisconnect()
) döndüren her ağ işlemi her zamanfalse
döndürür.
Uygulamanızın kablosuz ağlara bağlanması gerekiyorsa aşağıdaki alternatif yöntemleri kullanın:
- Kablosuz ağa anında yerel bağlantı oluşturmak için standart bir
NetworkRequest
nesnesindeWifiNetworkSpecifier
kullanın. - Kullanıcıya internet erişimi sağlamak üzere kablosuz ağlar eklemek için
WifiNetworkSuggestion
nesneleriyle çalışın. SırasıylaaddNetworkSuggestions()
veremoveNetworkSuggestions()
işlevlerini çağırarak otomatik bağlantı ağ seçimi iletişim kutusunda görünen ağları ekleyebilir ve kaldırabilirsiniz. Bu yöntemler için konum izni gerekmez.
Bazı telefon, Bluetooth ve kablosuz ağ API'leri, İYİ konum izni gerektirir
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa kablosuz ağ, kablosuz ağ farkında veya Bluetooth API'lerindeki çeşitli yöntemleri kullanabilmek için ACCESS_FINE_LOCATION
iznine sahip olmalıdır. Aşağıdaki bölümlerde etkilenen sınıflar ve yöntemler listelenmiştir.
Telefon
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Kablosuz bağlantı
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çeriğine erişim kısıtlandı
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 sessizce erişilmesini engeller. Android 10'dan itibaren bu izinler yalnızca imza erişimi içindir.
Cihazın ekran içeriklerine erişmesi gereken uygulamalar, kullanıcıdan izin isteğinde bulunan bir istem gösteren MediaProjection
API'yi kullanmalıdır.
Eski uygulamalarda kullanıcıya yönelik izin kontrolü
Uygulamanız Android 5.1 (API düzeyi 22) veya önceki sürümü hedefliyorsa kullanıcılar uygulamanızı Android 10 veya sonraki sürümleri çalıştıran bir cihazda ilk kez kullanırken Şekil 1'de gösterildiği gibi bir izinler ekranı görürler. Bu ekran kullanıcılara, sistemin daha önce yükleme sırasında uygulamanıza verdiği izinlere erişimi iptal etme fırsatı sunar.
Fiziksel aktiviteyi algılama
Android 10, kullanıcının adım sayısını algılaması veya kullanıcının fiziksel aktivitesini (ör. yürüyüş, bisiklete binme veya araçta hareket etme) sınıflandırması gereken uygulamalar için android.permission.ACTIVITY_RECOGNITION
yürütme zamanında izin sunar. Bu, kullanıcılara cihaz sensör verilerinin Ayarlar'da nasıl kullanıldığını göstermek için tasarlanmıştır.
Google Play Hizmetleri'ndeki bazı kitaplıklar (ör. Etkinlik Tanımlama API'si ve Google Fit API) kullanıcının uygulamanıza bu izni vermediği sürece sonuç sağlamaz.
Cihazdaki bu izni belirtmenizi gerektiren tek yerleşik sensörler adım sayacı ve adım algılayıcı sensörleridir.
Uygulamanız Android 9'u (API düzeyi 28) veya daha eski bir sürümü hedefliyorsa sistem, aşağıdaki koşulların her birini karşılıyorsa gerektiğinde uygulamanıza android.permission.ACTIVITY_RECOGNITION
iznini otomatik olarak verir:
- Manifest dosyasında
com.google.android.gms.permission.ACTIVITY_RECOGNITION
izni yer alıyor. - Manifest dosyası
android.permission.ACTIVITY_RECOGNITION
iznini içermiyor.
Sistem otomatik olarak android.permission.ACTIVITY_RECOGNITION
iznini verirse uygulamanızı Android 10'u hedefleyecek şekilde güncelledikten sonra bu izin yine sizde kalır. Ancak kullanıcı, sistem ayarlarından bu izni istediği zaman iptal edebilir.
Kullanıcı arayüzünden izin grupları kaldırıldı
Android 10'dan itibaren uygulamalar, kullanıcı arayüzünde izinlerin nasıl gruplandırıldığını arayamaz.