Android 12 memperkenalkan izin
BLUETOOTH_SCAN
,
BLUETOOTH_ADVERTISE
,
dan
BLUETOOTH_CONNECT
yang memungkinkan aplikasi Anda memindai perangkat di sekitar tanpa perlu
meminta izin lokasi. Aplikasi Anda harus menargetkan Android 12
untuk dapat mendeklarasikan izin ini.
Jika Anda menginginkan kontrol lebih untuk pengalaman penyambungan dan koneksi, gunakan izin yang dijelaskan di halaman ini.
Mendeklarasikan izin baru
Jika aplikasi Anda berinteraksi dengan perangkat Bluetooth, sebaiknya lakukan hal berikut:
- Jika aplikasi Anda mencari perangkat
Bluetooth, seperti periferal Bluetooth
hemat energi (BLE), tambahkan izin
BLUETOOTH_SCAN
ke manifes aplikasi. - Jika aplikasi Anda membuat perangkat saat ini dapat ditemukan oleh perangkat
Bluetooth lain,
tambahkan izin
BLUETOOTH_ADVERTISE
ke manifes aplikasi Anda. - Jika aplikasi Anda berkomunikasi dengan perangkat Bluetooth yang sudah
disambungkan, tambahkan
izin
BLUETOOTH_CONNECT
ke manifes aplikasi Anda. - Untuk deklarasi izin terkait Bluetooth lama Anda, tetapkan
android:maxSdkVersion
ke30
. Langkah kompatibilitas aplikasi ini membantu sistem hanya memberikan izin Bluetooth ke aplikasi Anda yang diperlukan saat diinstal di perangkat yang menjalankan Android 12.
Cuplikan kode berikut menunjukkan cara mendeklarasikan izin baru ini di aplikasi Anda:
<manifest> <!-- Request legacy Bluetooth permissions on older devices. --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <!-- Needed only if your app looks for Bluetooth devices. You must add an attribute to this permission, or declare the ACCESS_FINE_LOCATION permission, depending on the results when you check location usage in your app. --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <!-- Needed only if your app makes the device discoverable to Bluetooth devices. --> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <!-- Needed only if your app communicates with already-paired Bluetooth devices. --> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> ... </manifest>
Dialog yang dilihat pengguna
Izin BLUETOOTH_SCAN
, BLUETOOTH_ADVERTISE
, dan BLUETOOTH_CONNECT
merupakan izin waktu proses.
Oleh karena itu, Anda harus secara eksplisit meminta persetujuan pengguna
di aplikasi sebelum dapat mencari perangkat Bluetooth, membuat perangkat
dapat ditemukan di perangkat lain, atau berkomunikasi dengan perangkat Bluetooth
lain yang sudah disambungkan.
Saat aplikasi meminta setidaknya salah satu izin Bluetooth baru, sistem akan meminta pengguna untuk mengizinkan aplikasi Anda mengakses Perangkat di sekitar, seperti yang ditunjukkan pada gambar 1.
Mempertimbangkan cara penggunaan hasil pemindaian
Pertimbangkan dengan baik-baik apakah aplikasi Anda menggunakan hasil pemindaian Bluetooth untuk mendapatkan lokasi perangkat. Selesaikan langkah-langkah di salah satu bagian berikut sesuai dengan jawaban Anda:
Aplikasi tidak mendapatkan lokasi fisik
Jika aplikasi tidak mendapatkan lokasi fisik, Anda dapat membuat pernyataan tegas bahwa aplikasi tidak pernah menggunakan izin Bluetooth untuk mendapatkan lokasi fisik. Caranya, ikuti langkah-langkah berikut:
Tambahkan atribut
android:usesPermissionFlags
ke deklarasi izinBLUETOOTH_SCAN
, lalu tetapkan nilai atribut keneverForLocation
.Jika lokasi tidak diperlukan untuk aplikasi Anda, hapus izin
ACCESS_FINE_LOCATION
dari manifes aplikasi Anda.
Cuplikan kode berikut menunjukkan cara memperbarui file manifes aplikasi Anda:
<manifest> <!-- Request legacy Bluetooth permissions on older devices. --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <!-- Include "neverForLocation" only if you can strongly assert that your app never derives physical location from Bluetooth scan results. --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- Not needed if you can strongly assert that your app never derives physical location from Bluetooth scan results and doesn't need location access for any other purpose. --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />... </manifest>
Aplikasi memperoleh lokasi fisik
Jika aplikasi Anda benar-benar memperoleh lokasi fisik, Anda harus terus mendeklarasikan izin
ACCESS_FINE_LOCATION
dalam manifes aplikasi Anda, seperti yang ditunjukkan dalam
cuplikan kode berikut:
<manifest> <!-- Request legacy Bluetooth permissions on older devices. --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- Required if your app derives physical location from Bluetooth scan results. --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ... </manifest>