Android 10 (API level 29) memperkenalkan sejumlah fitur dan perubahan perilaku untuk melindungi privasi pengguna dengan lebih baik. Perubahan ini memperluas transparansi dan kontrol yang dimiliki pengguna atas data mereka dan kemampuan yang mereka berikan ke aplikasi. Fitur ini dapat berarti bahwa perilaku atau data tertentu yang diandalkan aplikasi Anda mungkin berperilaku berbeda dibandingkan dengan versi platform yang lebih lama. Dampak pada aplikasi Anda akan minimal 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 di Android 10 yang terkait dengan privasi.
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 tersebut dapat melihat jenis file berikut dalam perangkat penyimpanan eksternal tanpa perlu meminta izin pengguna terkait penyimpanan:
- File dalam direktori khusus aplikasi, yang diakses menggunakan
getExternalFilesDir()
. - Foto, video, dan klip audio yang dibuat aplikasi dari penyimpanan media.
Untuk mempelajari lebih lanjut penyimpanan terbatas, serta cara membagikan, 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
.
Tidak seperti izin
ACCESS_FINE_LOCATION
dan
ACCESS_COARSE_LOCATION
, izin ACCESS_BACKGROUND_LOCATION
hanya memengaruhi akses
aplikasi ke lokasi saat berjalan di latar belakang. Aplikasi dianggap mengakses
lokasi di latar belakang, kecuali jika salah satu kondisi berikut
terpenuhi:
- Aktivitas milik aplikasi bisa dilihat.
Aplikasi menjalankan layanan latar depan yang telah mendeklarasikan jenis layanan latar depan
location
.Untuk mendeklarasikan jenis layanan latar depan untuk layanan di aplikasi Anda, tetapkan
targetSdkVersion
ataucompileSdkVersion
aplikasi ke29
atau yang lebih tinggi. Pelajari lebih lanjut cara layanan latar depan dapat melanjutkan tindakan yang dimulai pengguna yang memerlukan akses ke lokasi.
Jika aplikasi Anda membuat dan memantau pembatasan wilayah dan
menargetkan Android 10 (level API 29) atau yang lebih tinggi, Anda harus mendeklarasikan
izin ACCESS_BACKGROUND_LOCATION
.
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>
untukACCESS_FINE_LOCATION
atauACCESS_COARSE_LOCATION
, sistem akan otomatis menambahkan elemen<uses-permission>
untukACCESS_BACKGROUND_LOCATION
selama penginstalan. - Jika aplikasi Anda meminta
ACCESS_FINE_LOCATION
atauACCESS_COARSE_LOCATION
, sistem akan otomatis menambahkanACCESS_BACKGROUND_LOCATION
ke permintaan tersebut.
Akses saat perangkat diupgrade ke Android 10
Jika pengguna memberi aplikasi Anda akses ke lokasi perangkat, baik
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
untuk aplikasi Anda. Kumpulan izin yang diterima aplikasi Anda setelah upgrade
bergantung pada versi SDK target dan izin yang ditentukan, seperti yang ditunjukkan dalam
tabel berikut:
Versi platform target | Izin kasar atau halus diberikan? |
Izin latar belakang ditentukan 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) | Tidak ada akses |
Perhatikan bahwa pengguna dapat mengubah tingkat akses ini bahkan setelah sistem otomatis memperbarui akses aplikasi Anda ke lokasi perangkat. Misalnya, pengguna dapat mengurangi akses aplikasi Anda hanya ke latar depan atau mencabut akses sepenuhnya. Sebelum mencoba mengakses lokasi perangkat, terutama dalam layanan latar depan, aplikasi Anda harus memeriksa apakah pengguna masih mengizinkan aplikasi untuk menerima informasi lokasi ini.
Akses dicabut saat mengupdate level API target pada perangkat Android 10
Pertimbangkan kasus saat aplikasi Anda sudah diinstal di perangkat yang menjalankan
Android 10. Jika Anda mengupdate aplikasi untuk menargetkan
Android 10 dalam situasi ini, perangkat akan mencabut
izin ACCESS_BACKGROUND_LOCATION
.
Untuk mengetahui informasi selengkapnya tentang cara mengambil lokasi perangkat saat aplikasi Anda berada di latar belakang, lihat panduan tentang menerima pembaruan lokasi berkala.
Batasan dalam memulai aktivitas dari latar belakang
Mulai Android 10, sistem menempatkan batasan untuk memulai aktivitas dari latar belakang. Perubahan perilaku ini membantu meminimalkan gangguan bagi pengguna dan membuat pengguna lebih dapat mengontrol konten yang ditampilkan di layar mereka. Selama aplikasi Anda memulai aktivitas sebagai akibat langsung dari interaksi pengguna, aplikasi Anda kemungkinan besar tidak akan terpengaruh oleh batasan ini.
Untuk mempelajari lebih lanjut alternatif yang direkomendasikan untuk memulai aktivitas dari latar belakang, lihat panduan tentang cara memberi tahu pengguna tentang peristiwa yang sensitif terhadap waktu di aplikasi Anda.
ID dan data
Bagian ini mencantumkan perubahan khusus terkait bekerja dengan ID dan data perangkat.
Penghapusan afinitas kontak
Mulai Android 10, platform tidak melacak informasi afinitas kontak. Akibatnya, jika aplikasi Anda melakukan penelusuran pada kontak pengguna, hasilnya tidak akan diurutkan menurut frekuensi interaksi.
Panduan tentang ContactsProvider
berisi pemberitahuan yang menjelaskan
kolom dan metode tertentu yang
tidak digunakan lagi di semua perangkat
yang dimulai di Android 10.
Pengacakan alamat MAC
Pada perangkat yang menjalankan Android 10 atau yang lebih tinggi, sistem akan mengirimkan alamat MAC acak secara default.
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
dapat mengambil alamat MAC acak yang ditetapkan ke jaringan tertentu dengan
memanggil
getRandomizedMacAddress()
. - Mendapatkan alamat MAC pabrik yang sebenarnya: Aplikasi pemilik perangkat dapat mengambil
alamat MAC hardware perangkat yang sebenarnya dengan memanggil
getWifiMacAddress()
. Metode ini berguna untuk melacak sejumlah besar perangkat.
Batasan akses ke sistem file /proc/net
Pada perangkat yang menjalankan Android 10 atau yang lebih tinggi, aplikasi tidak dapat mengakses
/proc/net
, yang menyertakan 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
Mulai Android 10, aplikasi harus memiliki
izin hak istimewa READ_PRIVILEGED_PHONE_STATE
untuk mengakses
ID perangkat yang tidak dapat direset, 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 direset, respons platform akan bervariasi berdasarkan versi SDK target:
- Jika aplikasi Anda menargetkan Android 10 atau yang lebih baru,
SecurityException
akan terjadi. - Jika aplikasi Anda menargetkan Android 9 (API level 28) atau yang lebih rendah, metode ini akan menampilkan
data
null
atau 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 dapat direset untuk tujuan pelacakan iklan atau analisis pengguna, gunakan ID Iklan Android untuk kasus penggunaan khusus tersebut. Untuk mempelajari lebih lanjut, lihat praktik terbaik untuk ID unik.
Akses terbatas ke data papan klip
Kecuali aplikasi Anda merupakan editor metode input (IME) default atau saat ini memiliki fokus, aplikasi Anda tidak dapat 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 dapat membaca nomor seri hingga pengguna memberikan izin kepada aplikasi untuk mengakses akses atau perangkat USB.
Untuk mempelajari lebih lanjut cara menggunakan 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
ditampilkan oleh metode
getCameraCharacteristics()
secara default. Secara khusus, aplikasi Anda harus memiliki
izin CAMERA
untuk
mengakses potensi metadata khusus perangkat yang disertakan dalam nilai yang ditampilkan
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 yang lebih tinggi tidak dapat mengaktifkan atau menonaktifkan
Wi-Fi. Metode
WifiManager.setWifiEnabled()
selalu menampilkan 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 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 aplikasi sistem atau DPC, metode berikut tidak akan menampilkan data yang berguna:
Metode
getConfiguredNetworks()
selalu menampilkan daftar kosong.Setiap metode operasi jaringan yang menampilkan nilai bilangan bulat—
addNetwork()
danupdateNetwork()
—selalu menampilkan -1.Setiap operasi jaringan yang menampilkan nilai boolean—
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
, dandisconnect()
—selalu menampilkanfalse
.
Jika aplikasi Anda perlu terhubung 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 dalam dialog pemilihan jaringan yang terhubung otomatis dengan masing-masing memanggiladdNetworkSuggestions()
danremoveNetworkSuggestions()
. Metode ini tidak memerlukan izin lokasi apa pun.
Beberapa API telepon, Bluetooth, dan Wi-Fi memerlukan izin akses lokasi FINE
Jika menargetkan Android 10 atau yang lebih tinggi, aplikasi harus memiliki izin
ACCESS_FINE_LOCATION
agar dapat menggunakan beberapa metode dalam Wi-Fi, Wi-Fi Aware,
atau Bluetooth API. Bagian berikut 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 mencegah akses senyap ke konten layar perangkat dengan mengubah cakupan izin READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
, dan CAPTURE_SECURE_VIDEO_OUTPUT
. Mulai Android 10, izin ini hanya ditujukan untuk akses tanda tangan.
Aplikasi yang perlu mengakses konten layar perangkat harus menggunakan
MediaProjection
API, yang menampilkan perintah untuk meminta pengguna memberikan izin.
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 saat menggunakan aplikasi Anda di perangkat yang menjalankan Android 10 atau yang lebih tinggi untuk pertama kalinya, seperti yang ditunjukkan pada Gambar 1. Layar ini memberi pengguna peluang untuk mencabut akses ke izin yang sebelumnya diberikan oleh sistem ke aplikasi Anda pada waktu penginstalan.
Pengenalan aktivitas fisik
Android 10 memperkenalkan izin runtime android.permission.ACTIVITY_RECOGNITION
untuk aplikasi yang perlu mendeteksi jumlah langkah pengguna atau mengklasifikasikan aktivitas fisik pengguna, seperti berjalan, bersepeda, atau bergerak di dalam kendaraan. Hal ini dirancang untuk memberi pengguna visibilitas terkait cara data sensor perangkat
digunakan di Setelan.
Beberapa library dalam layanan Google Play, seperti Activity Recognition API dan Google Fit API, tidak memberikan hasil kecuali pengguna telah memberikan izin ini ke aplikasi Anda.
Satu-satunya sensor bawaan di perangkat yang mengharuskan Anda mendeklarasikan izin ini adalah sensor penghitung langkah dan detektor langkah.
Jika aplikasi Anda menargetkan Android 9 (API level 28) atau yang lebih rendah, sistem akan otomatis memberikan
izin android.permission.ACTIVITY_RECOGNITION
ke aplikasi Anda sesuai kebutuhan,
jika aplikasi Anda memenuhi setiap kondisi berikut:
- File manifes menyertakan
izin
com.google.android.gms.permission.ACTIVITY_RECOGNITION
. - File manifes tidak menyertakan
izin
android.permission.ACTIVITY_RECOGNITION
.
Jika sistem otomatis memberikan izin android.permission.ACTIVITY_RECOGNITION
, aplikasi Anda akan mempertahankan izin setelah Anda mengupdate aplikasi untuk menargetkan
Android 10. Namun, pengguna dapat mencabut izin ini kapan saja di setelan sistem.
Grup izin dihapus dari UI
Mulai dari Android 10, aplikasi tidak dapat mencari tahu bagaimana pengelompokan izin di UI.