Android 10 (API level 29) memperkenalkan sejumlah fitur dan perubahan perilaku untuk melindungi privasi pengguna dengan lebih baik. Perubahan ini meningkatkan transparansi dan kontrol yang dimiliki pengguna atas data mereka dan kemampuan yang mereka berikan pada aplikasi. Dengan fitur ini, perilaku atau data tertentu yang diandalkan oleh aplikasi Anda mungkin akan berperilaku secara berbeda dibandingkan pada versi platform yang lebih lama. Hanya sedikit dampak yang akan ditimbulkan pada aplikasi Anda jika aplikasi mengikuti praktik terbaik saat ini untuk menangani data pengguna.
Halaman ini mencantumkan ringkasan dari setiap perubahan.
Perubahan utama
Bagian ini mencakup perubahan penting terkait privasi di Android 10.
Akses penyimpanan eksternal yang dibatasi ke media dan file aplikasi
Secara default, aplikasi yang menargetkan Android 10 dan yang lebih tinggi diberi akses terbatas ke penyimpanan eksternal atau penyimpanan terbatas. Aplikasi semacam ini bisa mengakses jenis file berikut di perangkat penyimpanan eksternal tanpa perlu meminta izin terkait penyimpanan kepada pengguna:
- File dalam direktori khusus aplikasi, diakses menggunakan
getExternalFilesDir()
. - Foto, klip audio, dan video yang dibuat oleh aplikasi dari penyimpanan media.
Untuk mempelajari lebih lanjut tentang penyimpanan terbatas serta cara berbagi, mengakses, dan mengubah file yang disimpan di perangkat penyimpanan eksternal, lihat panduan tentang cara mengelola file dalam penyimpanan eksternal serta mengakses dan memodifikasi file media.
Akses ke lokasi perangkat di latar belakang memerlukan izin
Untuk mendukung kontrol tambahan yang dimiliki pengguna atas akses aplikasi ke informasi lokasi, Android 10 memperkenalkan izin ACCESS_BACKGROUND_LOCATION
.
Berbeda dengan izin ACCESS_FINE_LOCATION
dan ACCESS_COARSE_LOCATION
, izin ACCESS_BACKGROUND_LOCATION
hanya mempengaruhi akses aplikasi ke lokasi saat berjalan di latar belakang. Aplikasi akan dianggap mengakses lokasi di latar belakang kecuali salah satu dari kondisi berikut terpenuhi:
- Aktivitas milik aplikasi bisa dilihat.
Aplikasi menjalankan layanan latar depan yang telah mendeklarasikan jenis layanan latar depan dari
location
.Untuk mendeklarasikan jenis layanan latar depan bagi layanan dalam aplikasi Anda, setel
targetSdkVersion
ataucompileSdkVersion
aplikasi Anda ke29
atau lebih tinggi. Pelajari lebih lanjut cara layanan latar depan bisa melanjutkan tindakan yang dimulai pengguna yang memerlukan akses ke lokasi.
Akses diberikan otomatis saat menargetkan Android 9 atau lebih rendah
Jika aplikasi Anda berjalan di Android 10 atau yang lebih tinggi tetapi menargetkan Android 9 (API level 28) atau yang lebih rendah, platform akan menerapkan perilaku berikut:
- Jika aplikasi Anda mendeklarasikan elemen
<uses-permission>
untuk salah satu dariACCESS_FINE_LOCATION
atauACCESS_COARSE_LOCATION
, sistem akan otomatis menambahkan elemen<uses-permission>
untukACCESS_BACKGROUND_LOCATION
selama peginstalan. - Jika aplikasi Anda meminta
ACCESS_FINE_LOCATION
atauACCESS_COARSE_LOCATION
, sistem akan otomatis menambahkanACCESS_BACKGROUND_LOCATION
ke permintaan.
Akses saat perangkat diupgrade ke Android 10
Jika pengguna mengizinkan aplikasi Anda mengakses lokasi perangkat, antara ACCESS_COARSE_LOCATION
atau ACCESS_FINE_LOCATION
, lalu mengupgrade perangkatnya dari Android 9 ke Android 10, sistem akan otomatis mengupdate kumpulan izin berbasis lokasi yang diberikan kepada aplikasi Anda. Kumpulan izin yang diterima oleh aplikasi Anda setelah upgrade bergantung pada versi SDK targetnya dan izin yang ditetapkan untuknya, seperti dalam tabel berikut:
Tabel 1. Perubahan status izin lokasi setelah upgrade perangkat ke Android 10
Versi platform target | Izin akurasi rendah atau akurasi tinggi diberikan? |
Izin latar belakang didefinisikan dalam manifes? |
Status izin default yang diperbarui |
---|---|---|---|
Android 10 | Ya | Ya | Akses latar depan dan latar belakang |
Android 10 | Ya | Tidak | Hanya akses latar depan |
Android 10 | Tidak | (Diabaikan oleh sistem) | Tanpa akses |
Android 9 atau yang lebih rendah | Ya | (Otomatis ditambahkan oleh sistem pada waktu upgrade perangkat) | Akses latar depan dan latar belakang |
Android 9 atau yang lebih rendah | Tidak | (Diabaikan oleh sistem) | Tanpa akses |
Untuk mengetahui informasi selengkapnya tentang cara mengambil lokasi perangkat saat aplikasi Anda berjalan di latar belakang, lihat panduan tentang menerima pembaruan lokasi berkala.
Batasan untuk memulai aktivitas dari latar belakang
Dimulai dari Android 10, sistem akan menempatkan batasan untuk memulai aktivitas dari latar belakang. Perubahan perilaku ini membantu meminimalkan gangguan untuk pengguna dan memberikan kontrol yang lebih menyeluruh kepada pengguna atas konten yang ditampilkan di layar. Selama aplikasi Anda memulai aktivitas sebagai akibat langsung dari interaksi pengguna, batasan ini kemungkinan besar tidak akan memengaruhinya.
Untuk mempelajari lebih lanjut alternatif yang direkomendasikan untuk memulai aktivitas dari latar belakang, lihat panduan tentang cara mengingatkan pengguna tentang peristiwa yang peka terhadap waktu dalam aplikasi Anda.
ID dan data
Bagian ini mencantumkan perubahan khusus terkait bekerja dengan ID dan data perangkat.
Penghapusan afinitas kontak
Dimulai dari Android 10, platform tidak akan melacak informasi afinitas kontak. Hasilnya, jika aplikasi Anda melakukan penelusuran pada kontak pengguna, hasil yang ditampilkan tidak akan diurutkan menurut frekuensi interaksi.
Panduan tentang ContactsProvider
berisi pemberitahuan yang menjelaskan kolom dan metode tertentu yang sudah tidak digunakan lagi di semua perangkat mulai di Android 10.
Pengacakan alamat MAC
Di perangkat yang menjalankan Android 10 atau yang lebih tinggi, sistem akan secara default mentransmisikan alamat MAC yang diacak.
Jika aplikasi Anda menangani kasus penggunaan perusahaan, platform akan menyediakan API untuk beberapa operasi yang terkait dengan alamat MAC:
- Mendapatkan alamat MAC acak: Aplikasi pemilik perangkat dan aplikasi pemilik profil bisa mendapatkan alamat MAC acak yang ditetapkan ke jaringan tertentu dengan memanggil
getRandomizedMacAddress()
. - Mendapatkan alamat MAC pabrik aktual: Aplikasi pemilik perangkat bisa mendapatkan alamat MAC hardware aktual perangkat dengan memanggil
getWifiMacAddress()
. Metode ini berguna untuk melacak sejumlah besar perangkat.
Batasan akses ke sistem file /proc/net
Di perangkat yang menjalankan Android 10 atau lebih tinggi, aplikasi tidak dapat mengakses /proc/net
, yang berisi informasi tentang status jaringan perangkat. Aplikasi yang memerlukan akses ke informasi ini, seperti VPN, harus menggunakan class NetworkStatsManager
atau ConnectivityManager
.
Batasan ID perangkat yang tidak dapat disetel ulang
Dimulai dari Android 10, aplikasi harus memiliki izin hak istimewa READ_PRIVILEGED_PHONE_STATE
untuk mengakses ID perangkat yang tidak bisa disetel ulang, yang mencakup IMEI dan nomor seri.
Metode yang terpengaruh meliputi:
Build
TelephonyManager
Jika aplikasi Anda tidak memiliki izin tersebut dan Anda mencoba meminta informasi tentang ID yang tidak dapat disetel ulang, respons platform akan bervariasi bergantung pada versi SDK target:
- Jika aplikasi menargetkan Android 10 atau yang lebih tinggi,
SecurityException
akan terjadi. - Jika aplikasi menargetkan Android 9 (API level 28) atau yang lebih rendah, metode ini akan menghasilkan
null
atau data placeholder jika aplikasi memiliki izinREAD_PHONE_STATE
. Jika tidak,SecurityException
akan terjadi.
Beberapa kasus penggunaan tidak memerlukan ID perangkat yang tidak bisa disetel ulang. Misalnya, jika aplikasi Anda menggunakan ID perangkat yang tidak bisa disetel ulang untuk tujuan pelacakan iklan atau analisis pengguna, gunakan ID Iklan Android untuk kasus penggunaan khusus tersebut sebagai gantinya. Untuk mempelajari lebih lanjut, lihat praktik terbaik untuk ID unik.
Akses terbatas ke data papan klip
Kecuali aplikasi Anda merupakan editor metode masukan (IME) default atau saat ini sedang difokuskan, aplikasi tidak bisa mengakses data papan klip di Android 10 atau yang lebih tinggi.
Perlindungan nomor seri perangkat USB
Jika aplikasi Anda menargetkan Android 10 atau yang lebih tinggi, aplikasi tidak bisa membaca nomor seri hingga pengguna memberinya izin untuk mengakses aksesori atau perangkat USB.
Untuk mempelajari lebih lanjut cara bekerja dengan perangkat USB, lihat panduan tentang cara mengonfigurasi host USB.
Kamera dan konektivitas
Bagian ini mencantumkan perubahan khusus terkait API konektivitas dan metadata kamera.
Batasan akses ke detail dan metadata kamera
Android 10 mengubah cakupan informasi yang diberikan oleh metode getCameraCharacteristics()
secara default. Secara khusus, aplikasi Anda harus memiliki izin CAMERA
agar dapat mengakses potensi metadata spesifik perangkat yang disertakan dalam nilai yang dihasilkan oleh metode ini.
Untuk mempelajari perubahan ini lebih lanjut, lihat bagian tentang bidang kamera yang memerlukan izin.
Batasan untuk mengaktifkan dan menonaktifkan Wi-Fi
Aplikasi yang menargetkan Android 10 atau lebih tinggi tidak dapat mengaktifkan atau menonaktifkan Wi-Fi. Metode
WifiManager.setWifiEnabled()
selalu menghasilkan nilai false
.
Jika Anda perlu meminta pengguna untuk mengaktifkan dan menonaktifkan Wi-Fi, gunakan panel setelan.
Batasan akses langsung ke jaringan Wi-Fi yang dikonfigurasi
Untuk melindungi privasi pengguna, konfigurasi manual daftar jaringan Wi-Fi kini dibatasi untuk aplikasi sistem dan pengontrol kebijakan perangkat (DPC). DPC yang diberikan bisa berupa pemilik perangkat atau pemilik profil.
Jika aplikasi Anda menargetkan Android 10 atau yang lebih tinggi dan bukan merupakan aplikasi sistem atau DPC, metode berikut tidak akan memberikan data yang berguna:
Metode
getConfiguredNetworks()
selalu menghasilkan daftar kosong.Setiap metode operasi jaringan yang menampilkan nilai bilangan bulat,
addNetwork()
danupdateNetwork()
, selalu menghasilkan nilai -1.Setiap operasi jaringan yang menghasilkan nilai boolean, seperti
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
, dandisconnect()
akan selalu menghasilkanfalse
.
Jika aplikasi Anda perlu tersambung ke jaringan Wi-Fi, gunakan metode alternatif berikut:
- Untuk memicu koneksi lokal instan ke jaringan Wi-Fi, gunakan
WifiNetworkSpecifier
dalam objekNetworkRequest
standar. - Untuk menambahkan jaringan Wi-Fi sebagai pertimbangan dalam menyediakan akses internet kepada pengguna, gunakan objek
WifiNetworkSuggestion
. Anda dapat menambahkan dan menghapus jaringan yang muncul di dialog pemilihan jaringan sambungkan otomatis dengan mengaktifkan masing-masingaddNetworkSuggestions()
danremoveNetworkSuggestions()
. Metode ini tidak memerlukan izin lokasi apa pun.
Beberapa API telepon, Bluetooth, dan Wi-Fi memerlukan izin lokasi akurasi tinggi
Jika menargetkan Android 10 atau yang lebih tinggi, aplikasi Anda harus memiliki izin ACCESS_FINE_LOCATION
agar dapat menggunakan beberapa metode dalam API Wi-Fi, Wi-Fi Aware, atau Bluetooth. Bagian berikut ini mencantumkan class dan metode yang terpengaruh.
Telepon
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Wi-Fi
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
Izin
Bagian ini menjelaskan pembaruan untuk model izin Android.
Akses ke konten layar yang dibatasi
Untuk melindungi konten layar pengguna, Android 10 melarang akses diam-diam ke konten layar perangkat dengan mengubah cakupan izin READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
, dan CAPTURE_SECURE_VIDEO_OUTPUT
. Dimulai dari Android 10, izin ini hanya ditujukan bagi akses tanda tangan.
Aplikasi yang perlu mengakses konten layar perangkat harus menggunakan MediaProjection
API, yang menampilkan perintah untuk meminta pengguna memberikan persetujuan.
Pemeriksaan izin sisi pengguna pada aplikasi lama
Jika aplikasi Anda menargetkan Android 5.1 (API level 22) atau yang lebih rendah, pengguna akan melihat layar izin ketika menggunakan aplikasi Anda untuk kali pertama di perangkat yang menjalankan Android 10 atau yang lebih tinggi, seperti dalam Gambar 1. Layar ini memberikan kesempatan kepada pengguna untuk mencabut akses ke izin yang telah diberikan oleh sistem ke aplikasi Anda saat diinstal.
Pengenalan aktivitas fisik
Android 10 memperkenalkan izin waktu proses ACTIVITY_RECOGNITION
untuk aplikasi yang perlu mendeteksi jumlah langkah pengguna atau mengklasifikasikan aktivitas fisik pengguna, seperti berjalan, bersepeda, atau bergerak di dalam kendaraan. Izin ini didesain untuk memberikan visibilitas kepada pengguna terkait cara data sensor perangkat digunakan dalam Setelan.
Beberapa library dalam layanan Google Play, seperti API Pengenalan Aktivitas dan API Google Fit, tidak akan memberikan hasil kecuali pengguna telah memberikan izin ini kepada aplikasi Anda.
Satu-satunya sensor bawaan perangkat yang mengharuskan Anda mendeklarasikan izin ini adalah sensor penghitung langkah dan detektor langkah.
Jika aplikasi Anda menargetkan Android 9 (API level 28) atau versi lama dan menentukan izin com.google.android.gms.permission.ACTIVITY_RECOGNITION
dalam file manifesnya, sistem akan memberikan izin ini secara otomatis ke aplikasi Anda jika diperlukan.
Saat Anda memperbarui aplikasi agar menargetkan Android 10, platform akan mempertahankan izin tersebut. Namun, pengguna bisa mencabut izin ini kapan saja dalam setelan sistem.
Grup izin dihapus dari UI
Dimulai dari Android 10, aplikasi tidak dapat mencari tahu bagaimana izin dikelompokkan dalam UI.