Android 10 (API düzeyi 29), kullanıcıların gizliliğini daha iyi korumak için bir dizi özellik ve davranış değişikliği sunar. Bu değişiklikler, kullanıcıların verileri ve uygulamalara verdikleri izinler ü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 uygulamalara uyuyorsa bu değişikliklerden minimum düzeyde etkilenir.
Bu sayfada her değişikliğin özeti listelenir.
En önemli değişiklikler
Bu bölümde, Android 10'da gizlilikle ilgili yapılan önemli değişiklikler yer almaktadır.
Uygulama dosyaları ve medya ile sınırlı harici depolama alanı erişim kapsamı
Android 10 ve sonraki sürümleri hedefleyen uygulamalara varsayılan olarak harici depolama alanına kısıtlı erişim (kapsamlı depolama) verilir. Bu tür uygulamalar, depolama alanıyla ilgili herhangi bir kullanıcı izni istemeden harici depolama cihazındaki aşağıdaki dosya türlerini görebilir:
getExternalFilesDir()kullanılarak erişilen, uygulamaya özel dizindeki dosyalar.- Uygulamanın medya deposundan oluşturduğu fotoğraflar, videolar ve ses klipleri.
Kapsamlı depolama alanı ve harici depolama cihazlarına kaydedilen dosyaları paylaşma, bunlara erişme ve bunları değiştirme 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 gerekiyor
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 sunar.
ACCESS_FINE_LOCATION
ve
ACCESS_COARSE_LOCATION
izinlerinin aksine ACCESS_BACKGROUND_LOCATION izni, yalnızca uygulama arka planda çalışırken konuma erişimini etkiler. Aşağıdaki koşullardan biri karşılanmadığı sürece uygulamanın arka planda konuma eriştiği kabul edilir:
- Uygulamaya ait bir etkinlik görünür durumda.
Uygulama,
locationön plan hizmet türü beyan eden bir ön plan hizmeti çalıştırıyor.Uygulamanızdaki bir hizmetin ön plan hizmet türünü beyan etmek için uygulamanızın
targetSdkVersionveyacompileSdkVersiondeğerini29ya da daha yüksek bir değere ayarlayın. Ön plan hizmetlerinin, konuma erişim gerektiren kullanıcı tarafından başlatılan işlemleri nasıl devam ettirebileceği hakkında daha fazla bilgi edinin.
Uygulamanız coğrafi sınırlar oluşturup izliyorsa ve Android 10 (API düzeyi 29) veya sonraki sürümleri hedefliyorsa ACCESS_BACKGROUND_LOCATION iznini beyan etmeniz gerekir.
Android 9 veya daha eski sürümler hedeflendiğinde erişim otomatik olarak verilir.
Uygulamanız Android 10 veya sonraki sürümlerde çalışıyor ancak Android 9 (API düzeyi 28) veya önceki sürümleri hedefliyorsa platform aşağıdaki davranışı uygular:
- Uygulamanız
ACCESS_FINE_LOCATIONveyaACCESS_COARSE_LOCATIONiçin bir<uses-permission>öğesi bildirirse sistem, yükleme sırasındaACCESS_BACKGROUND_LOCATIONiçin otomatik olarak bir<uses-permission>öğesi ekler. - Uygulamanız
ACCESS_FINE_LOCATIONveyaACCESS_COARSE_LOCATIONizni isterse sistem, isteğe otomatik olarakACCESS_BACKGROUND_LOCATIONiznini 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ı izinleri otomatik olarak günceller. Uygulamanızın yükseltme işleminden sonra aldığı izinler, aşağıdaki tabloda gösterildiği gibi hedef SDK sürümüne ve tanımlanan izinlerine bağlıdır:
Tablo 1. Cihaz Android 10'a yükseltildikten sonra konum izni durumunda yapılan değişiklikler
| Hedef platform sürümü | Yaklaşık veya tam konum izni verildi mi? |
Arka plan izni manifest dosyasında tanımlanmış mı? |
Varsayılan izin durumu güncellendi |
|---|---|---|---|
| Android 10 | Evet | Evet | Ön planda ve arka planda erişim |
| Android 10 | Evet | Hayır | Yalnızca ön planda erişim |
| Android 10 | Hayır | (Sistem tarafından yoksayıldı) | Erişim yok |
| Android 9 veya önceki sürümler | Evet | Cihaz yükseltme sırasında sistem tarafından otomatik olarak eklenir. | Ön planda ve arka planda erişim |
| Android 9 veya önceki sürümler | Hayır | (Sistem tarafından yoksayı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 erişimini yalnızca ön planla sınırlayabilir veya erişimi tamamen iptal edebilir. Uygulamanız, özellikle ön plan hizmetinde cihazın konumuna erişmeye çalışmadan önce kullanıcının uygulamanızın bu konum bilgisini almasına hâlâ izin verip vermediğini kontrol etmelidir.
Android 10 cihazlarda hedef API düzeyi güncellenirken erişim iptal edilir
Uygulamanızın Android 10 çalıştıran bir cihaza zaten 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 için periyodik konum güncellemelerini alma ile ilgili kılavuza bakın.
Arka planda etkinlik başlatmayla ilgili kısıtlamalar
Android 10'dan itibaren sistem, arka planda etkinlik başlatmaya kısıtlamalar getirir. Bu davranış değişikliği, kullanıcının kesintiye uğramasını en aza indirir ve kullanıcının ekranında gösterilenler üzerinde daha fazla kontrol sahibi olmasını sağlar. Uygulamanız, kullanıcı etkileşiminin doğrudan bir sonucu olarak etkinlik başlatıyorsa büyük olasılıkla bu kısıtlamalardan etkilenmez.
Arka plandan etkinlik başlatmaya alternatif olarak önerilen yöntem hakkında daha fazla bilgi edinmek için uygulamanızda kullanıcıları zamana duyarlı etkinlikler hakkında uyarma ile ilgili kılavuzu inceleyin.
Tanımlayıcılar ve veriler
Bu bölümde, cihaz tanımlayıcıları ve verileriyle çalışmaya özgü değişiklikler listelenmektedir.
Kişi yakınlığının kaldırılması
Android 10'dan itibaren platform, kişi yakınlığı bilgilerini takip etmez. Bu nedenle, 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ılavuzda, Android 10'dan itibaren tüm cihazlarda kullanımdan kaldırılan alanları ve yöntemleri açıklayan bir bildirim yer alır.
MAC adresi rastgeleleştirme
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 alma: Cihaz sahibi uygulamaları ve profil sahibi uygulamaları,
getRandomizedMacAddress()yöntemini çağırarak belirli bir ağa atanan rastgele MAC adresini alabilir. - Gerçek, fabrika MAC adresini alma: Cihaz sahibi uygulamaları,
getWifiMacAddress()yöntemini çağırarak cihazın gerçek donanım MAC adresini alabilir. Bu yöntem, cihaz filolarını izlemek için kullanışlı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 öğesine 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ıyla ilgili 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ı dahil) erişebilmesi için READ_PRIVILEGED_PHONE_STATE ayrıcalıklı iznine sahip olması gerekir.
Etkilenen yöntemler şunlardır:
BuildTelephonyManager
Uygulamanızın izni yoksa ve sıfırlanamayan tanımlayıcılar hakkında bilgi istemeye çalışırsanız platformun yanıtı, hedef SDK sürümüne göre değişir:
- Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa
SecurityExceptionhatası oluşur. - Uygulamanız Android 9 (API düzeyi 28) veya önceki sürümleri hedefliyorsa ve
READ_PHONE_STATEiznine sahipse yöntem,nullveya yer tutucu verileri döndürür. Aksi takdirdeSecurityExceptionhatası oluşur.
Birçok kullanım alanında sıfırlanamayan cihaz tanımlayıcıları gerekmez. Örneğin, uygulamanız reklam izleme veya kullanıcı analizi amacıyla sıfırlanamayan cihaz tanımlayıcıları kullanıyorsa bu özel 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 başlıklı makaleyi inceleyin.
Pano verilerine sınırlı erişim
Uygulamanız varsayılan giriş yöntemi düzenleyicisi (IME) değilse 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 cihazına veya aksesuarına erişim 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 ile ilgili 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üğü bilgilerin kapsamını değiştirir. Özellikle, uygulamanızın bu yöntemin dönüş değerine dahil edilen, cihaza özgü olabilecek meta verilere erişebilmesi için 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ırakma kısıtlaması
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 ayarlar panelini kullanın.
Yapılandırılmış kablosuz ağlara doğrudan erişimle ilgili kısıtlamalar
Kullanıcı gizliliğini korumak için kablosuz ağ listesinin manuel olarak yapılandırılması, sistem uygulamaları ve cihaz politikası denetleyicileri (DPC'ler) ile kısıtlanmıştır. Belirli bir DPC, cihaz sahibi veya profil sahibi olabilir.
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa ve 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ı değeri döndüren her ağ işlemi yöntemi (
addNetwork()veupdateNetwork()) her zaman -1 değerini döndürür.Boole değeri döndüren her ağ işlemi (
removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect()vedisconnect()) her zamanfalsedeğ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
NetworkRequestnesnesindeWifiNetworkSpecifierkullanın. - Kullanıcıya internet erişimi sağlamak üzere değerlendirilecek kablosuz ağlar eklemek için
WifiNetworkSuggestionnesneleriyle çalışın. SırasıylaaddNetworkSuggestions()veremoveNetworkSuggestions()yöntemlerini çağırarak otomatik bağlantı ağı seçim iletişim kutusunda görünen ağları ekleyip kaldırabilirsiniz. Bu yöntemler için konum izni gerekmez.
Bazı telefon, Bluetooth ve kablosuz API'leri hassas konum izni gerektirir.
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa kablosuz, Wi-Fi Aware 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
TelephonyManagergetCellLocation()getAllCellInfo()requestNetworkScan()requestCellInfoUpdate()getAvailableNetworks()getServiceState()
TelephonyScanManagerrequestNetworkScan()
TelephonyScanManager.NetworkScanCallbackonResults()
PhoneStateListeneronCellLocationChanged()onCellInfoChanged()onServiceStateChanged()
Kablosuz bağlantı
WifiManagerstartScan()getScanResults()getConnectionInfo()getConfiguredNetworks()
WifiAwareManagerWifiP2pManagerWifiRttManager
Bluetooth
BluetoothAdapterstartDiscovery()startLeScan()
BluetoothAdapter.LeScanCallbackBluetoothLeScannerstartScan()
İzinler
Bu bölümde, Android izin modelindeki 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'dan itibaren bu izinler yalnızca imza erişimi ile kullanılabilir.
Cihazın ekran içeriklerine erişmesi gereken uygulamalar, kullanıcıdan izin isteyen bir istem gösteren MediaProjection API'sini kullanmalıdır.
Eski uygulamalarda kullanıcılara yönelik izin kontrolü
Uygulamanız Android 5.1 (API düzeyi 22) veya daha eski bir sürümü hedefliyorsa kullanıcılar, uygulamanızı Android 10 veya sonraki bir sürümü çalıştıran bir cihazda ilk kez kullanırken Şekil 1'de gösterildiği gibi bir izin ekranı görür. 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 aktivite tanıma
Android 10, kullanıcının adım sayısını algılaması veya kullanıcının fiziksel aktivitesini (ör. yürüme, bisiklete binme veya araçta hareket etme) sınıflandırması gereken uygulamalar için android.permission.ACTIVITY_RECOGNITION çalışma zamanında istenen iznini 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 Activity Recognition API ve Google Fit API gibi bazı kitaplıklar, kullanıcı uygulamanıza bu izni vermediği sürece sonuç sağlamaz.
Cihazda bu izni beyan etmenizi gerektiren tek yerleşik sensörler, adım sayar ve adım algılayıcı sensörleridir.
Uygulamanız Android 9 (API düzeyi 28) veya daha eski bir sürümü hedefliyorsa ve aşağıdaki koşulların her birini karşılıyorsa sistem, uygulamanıza gerektiğinde android.permission.ACTIVITY_RECOGNITION iznini otomatik olarak verir:
- Manifest dosyasında
com.google.android.gms.permission.ACTIVITY_RECOGNITIONizni yer alıyor. - Manifest dosyanızda
android.permission.ACTIVITY_RECOGNITIONizni bulunmuyor.
Sistem, android.permission.ACTIVITY_RECOGNITION iznini otomatik olarak verirse uygulamanızı Android 10'u hedefleyecek şekilde güncelledikten sonra uygulamanız bu izni korur. Ancak kullanıcı, sistem ayarlarından bu izni 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.