Untuk menggunakan fitur Bluetooth di aplikasi, Anda harus mendeklarasikan beberapa izin akses. Anda juga harus menentukan apakah aplikasi memerlukan dukungan untuk Bluetooth klasik atau Bluetooth Hemat Energi (BLE). Jika tidak memerlukan Bluetooth klasik atau BLE tetapi masih dapat memperoleh manfaat dari ini teknologi tinggi, Anda dapat memeriksa ketersediaan saat runtime.
Mendeklarasikan izin
Kumpulan izin yang Anda deklarasikan dalam aplikasi bergantung pada target aplikasi Anda Versi SDK.
Menargetkan Android 12 atau yang lebih baru
Catatan: Di Android 8.0 (level API 26) dan yang lebih tinggi, Pendamping Pengelola Perangkat (CDM) memberikan metode koneksi yang lebih sederhana ke perangkat pendamping, dibandingkan dengan izin yang dijelaskan di bagian ini. Tujuan Sistem CDM menyediakan UI penyambungan atas nama aplikasi Anda dan tidak memerlukan izin akses lokasi.
Jika Anda menginginkan kontrol lebih besar atas pengalaman penyambungan dan penyambungan, gunakan izin yang dijelaskan dalam bagian ini.
Jika aplikasi Anda menargetkan Android 12 (API level 31) atau yang lebih baru, deklarasikan hal berikut izin dalam file manifes aplikasi Anda:
- Jika aplikasi Anda mencari Bluetooth
perangkat, seperti
Periferal BLE, mendeklarasikan
BLUETOOTH_SCAN
izin akses. - Jika aplikasi Anda membuat perangkat yang aktif dapat ditemukan oleh perangkat Bluetooth lain
perangkat,
mendeklarasikan
BLUETOOTH_ADVERTISE
izin akses. - Jika aplikasi Anda berkomunikasi dengan Bluetooth yang sudah disambungkan
perangkat, deklarasikan atribut
BLUETOOTH_CONNECT
izin akses. - Untuk deklarasi izin terkait Bluetooth lama Anda, tetapkan
android:maxSdkVersion
ke30
. Langkah kompatibilitas aplikasi ini membantu sistem memberikan aplikasi Anda hanya izin Bluetooth yang diperlukan saat diinstal perangkat yang menjalankan Android 12 atau yang lebih tinggi. - Jika aplikasi Anda menggunakan hasil pemindaian Bluetooth untuk mendapatkan lokasi fisik, deklarasikan
tindakan
ACCESS_FINE_LOCATION
izin akses. Jika tidak, Anda dapat menegaskan dengan kuat bahwa aplikasi Anda tidak memperoleh lokasi fisik.
Izin BLUETOOTH_ADVERTISE
, BLUETOOTH_CONNECT
, dan BLUETOOTH_SCAN
merupakan izin waktu proses.
Oleh karena itu, Anda harus secara
eksplisit meminta pengguna
persetujuan di aplikasi Anda sebelum Anda dapat mencari
Perangkat Bluetooth, membuat perangkat dapat ditemukan oleh perangkat lain, atau berkomunikasi
dengan perangkat Bluetooth yang sudah disambungkan. Bila aplikasi Anda meminta setidaknya salah satu
izin akses ini, sistem akan meminta pengguna
untuk mengizinkan aplikasi Anda mengakses
Perangkat di sekitar, seperti yang ditunjukkan pada gambar 1.
Cuplikan kode berikut menunjukkan cara mendeklarasikan terkait Bluetooth di aplikasi Anda jika menargetkan Android 12 atau yang lebih tinggi:
<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.
If your app doesn't use Bluetooth scan results to derive physical
location information, you can
<a href="#assert-never-for-location">strongly assert that your app
doesn't derive physical location</a>. -->
<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" />
<!-- Needed only if your app uses Bluetooth scan results to derive physical location. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...
</manifest>
Tegaskan dengan jelas bahwa aplikasi Anda tidak memperoleh lokasi fisik
Jika aplikasi Anda tidak menggunakan hasil pemindaian Bluetooth untuk mendapatkan lokasi fisik, Anda dapat membuat pernyataan kuat bahwa aplikasi Anda tidak pernah menggunakan izin Bluetooth untuk mendapatkan lokasi fisik. Caranya, selesaikan 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>
<!-- 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" />
<!-- 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. -->
<strike><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /></strike>
...
</manifest>
Menargetkan Android 11 atau yang lebih rendah
Jika aplikasi Anda menargetkan Android 11 (API level 30) atau yang lebih rendah, deklarasikan hal berikut izin dalam file manifes aplikasi Anda:
BLUETOOTH
diperlukan untuk melakukan komunikasi Bluetooth klasik atau BLE, seperti meminta permintaan koneksi jarak jauh, menerima koneksi, dan mentransfer data.ACCESS_FINE_LOCATION
diperlukan karena, di Android 11 dan yang lebih lama, pemindaian Bluetooth dapat berpotensi digunakan untuk mengumpulkan informasi tentang lokasi .
Karena izin akses lokasi adalah izin runtime, Anda harus meminta izin ini saat runtime serta mendeklarasikannya dalam manifes Anda.
Temukan perangkat Bluetooth lokal
Jika Anda ingin aplikasi memulai penemuan perangkat atau memanipulasi Bluetooth
setelan, Anda harus mendeklarasikan
BLUETOOTH_ADMIN
izin akses. Sebagian besar aplikasi membutuhkan izin ini
agar dapat menemukan
perangkat Bluetooth lokal. Jangan gunakan kemampuan lain yang diberikan oleh kemampuan ini
izin kecuali aplikasi adalah "power manager" yang mengubah setelan Bluetooth
sesuai permintaan pengguna. Deklarasikan izin di file manifes aplikasi Anda. Contoh:
<manifest>
...
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
</manifest>
Jika aplikasi Anda mendukung layanan dan dapat berjalan di Android 10 (API level 29) atau
Android 11, Anda juga harus mendeklarasikan
ACCESS_BACKGROUND_LOCATION
izin untuk menemukan perangkat Bluetooth. Untuk mengetahui informasi selengkapnya tentang
persyaratan, lihat Mengakses lokasi di
latar belakang.
Cuplikan kode berikut menunjukkan cara mendeklarasikan ACCESS_BACKGROUND_LOCATION
izin akses:
<manifest>
...
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
</manifest>
Lihat <uses-permission>
untuk informasi selengkapnya tentang mendeklarasikan izin aplikasi.
Tentukan penggunaan fitur Bluetooth
Jika Bluetooth adalah bagian penting dari aplikasi, Anda dapat menambahkan flag ke manifes
file yang mengindikasikan persyaratan ini. Tujuan
Elemen <uses-feature>
mengizinkan
Anda untuk menentukan jenis perangkat keras yang
digunakan aplikasi Anda dan apakah itu
tidak diperlukan.
Contoh ini menunjukkan cara menunjukkan bahwa Bluetooth klasik diperlukan untuk .
<uses-feature android:name="android.hardware.bluetooth" android:required="true"/>
Jika aplikasi Anda mengandalkan Bluetooth Energi Rendah, Anda dapat menggunakan hal berikut:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
Jika Anda menyatakan bahwa fitur diperlukan untuk aplikasi, maka Google Play Store akan
menyembunyikan aplikasi Anda dari pengguna
pada perangkat yang tidak memiliki fitur tersebut. Karena alasan ini, Anda
sebaiknya hanya menyetel atribut yang diperlukan ke true
jika aplikasi Anda tidak dapat berfungsi tanpa
fitur tersebut.
Memeriksa ketersediaan fitur saat runtime
Untuk membuat aplikasi Anda tersedia untuk perangkat yang tidak mendukung Bluetooth klasik atau
BLE, Anda harus tetap menyertakan elemen <uses-feature>
dalam file
bukan manifes, tetapi menyetel required="false"
. Kemudian, pada waktu proses, Anda dapat menentukan
ketersediaan fitur dengan menggunakan
PackageManager.hasSystemFeature()
:
Kotlin
// Check to see if the Bluetooth classic feature is available. val bluetoothAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) // Check to see if the BLE feature is available. val bluetoothLEAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)
Java
// Use this check to determine whether Bluetooth classic is supported on the device. // Then you can selectively disable BLE-related features. boolean bluetoothAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); // Use this check to determine whether BLE is supported on the device. Then // you can selectively disable BLE-related features. boolean bluetoothLEAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);