Uprawnienia Bluetooth

Aby korzystać z funkcji Bluetooth w aplikacji, musisz zadeklarować kilka . Należy też określić, czy aplikacja wymaga obsługęklasycznego lub Bluetooth Low Energy (BLE). Jeśli Twoja aplikacja nie wymaga klasycznego Bluetootha ani Bluetootha LE, ale może korzystać z tych technologii, możesz sprawdzić ich dostępność w czasie działania.

Deklarowanie uprawnień

Zestaw uprawnień, które zadeklarujesz w aplikacji, zależy od jej ustawień kierowania. Wersja pakietu SDK.

Docelowa wersja Androida 12 lub nowszego

Uwaga: w Androidzie 8.0 (interfejs API na poziomie 26) i nowszych Menedżer urządzeń towarzyszących (CDM) zapewnia bardziej usprawniony sposób łączenia się z urządzeniami towarzyszącymi niż uprawnienia opisane w tej sekcji. System CDM zapewnia interfejs parowania w imieniu aplikacji i nie wymaga dostępu do lokalizacji.

Jeśli chcesz mieć większą kontrolę nad parowaniem i łączeniem, użyj uprawnień opisanych w tej sekcji.

Okno uprawnień Bluetooth
Okno uprawnień systemowych z prośbą o przyznanie aplikacji uprawnień do wykrywania, reklamowania i łączenia się z urządzeniami w pobliżu.

Jeśli Twoja aplikacja jest kierowana na Androida 12 (poziom interfejsu API 31) lub nowszego, zadeklaruj w pliku manifestu aplikacji te uprawnienia:

  1. Jeśli aplikacja szuka Bluetootha urządzeń, takich jak urządzeń peryferyjnych BLE, zadeklaruj BLUETOOTH_SCAN. uprawnienia.
  2. Jeśli aplikacja umożliwia wykrycie bieżącego urządzenia dla innych urządzeń Bluetooth , zadeklaruj BLUETOOTH_ADVERTISE. uprawnienia.
  3. Jeśli aplikacja komunikuje się z urządzeniami Bluetooth, które zostały już sparowane, zadeklaruj uprawnienie BLUETOOTH_CONNECT.
  4. W przypadku starszych deklaracji uprawnień dotyczących Bluetootha ustaw android:maxSdkVersion do 30. Ten krok dotyczący zgodności z aplikacją pomaga systemowi przyznaj aplikacji tylko te uprawnienia dotyczące Bluetootha, których potrzebuje, na urządzeniach z Androidem 12 lub nowszym.
  5. Jeśli Twoja aplikacja używa wyników skanowania Bluetooth do określania lokalizacji fizycznej, zadeklaruj ACCESS_FINE_LOCATION uprawnienia. W przeciwnym razie możesz potwierdzić, że Twoja aplikacja nie uzyskuje dostępu do fizycznej lokalizacji.

Uprawnienia BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT i BLUETOOTH_SCAN to uprawnienia czasu działania. Dlatego musisz wyraźnie poprosić użytkownika o do zatwierdzenia w aplikacji. urządzeń Bluetooth, ustawić je jako wykrywalne dla innych urządzeń ani się komunikować; z już sparowanymi urządzeniami Bluetooth. Gdy aplikacja wysyła żądanie co najmniej jednego z tych elementów: system prosi użytkownika o zezwolenie aplikacji na dostęp Urządzenia w pobliżu, jak pokazano na ilustracji 1.

Fragment kodu poniżej pokazuje, jak zadeklarować Bluetooth uprawnień w aplikacji, jeśli jest ona kierowana na Androida 12 lub nowszego:

<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>

Potwierdź, że Twoja aplikacja nie określa fizycznej lokalizacji

Jeśli aplikacja nie używa wyników skanowania Bluetooth do określenia lokalizacji fizycznej, może jednoznacznie stwierdzać, że aplikacja nigdy nie używa uprawnień dotyczących Bluetootha określić lokalizację fizyczną. W tym celu wykonaj następujące czynności:

  1. Dodaj atrybut android:usesPermissionFlags do pola BLUETOOTH_SCAN deklaracji uprawnień i ustaw wartość tego atrybutu na neverForLocation.

  2. Jeśli lokalizacja nie jest potrzebna do działania aplikacji, usuń uprawnienie ACCESS_FINE_LOCATION z pliku manifestu aplikacji.

Ten fragment kodu pokazuje, jak zaktualizować plik manifestu aplikacji:

<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>

Kieruj na Androida w wersji 11 lub starszej

Jeśli Twoja aplikacja jest kierowana na Androida 11 (poziom interfejsu API 30) lub starszego, zadeklaruj te informacje uprawnienia w pliku manifestu aplikacji:

  • Pole BLUETOOTH jest wymagane do wykonywania dowolnej komunikacji Bluetooth (klasycznej) lub BLE, np. wysyłania żądania akceptacja połączenia i przesyłanie danych.
  • ACCESS_FINE_LOCATION jest konieczne, ponieważ na Androidzie 11 i starszych wersjach skanowanie przez Bluetooth mogłyby zostać użyte do zebrania informacji o lokalizacji użytkownika.

Uprawnienia do lokalizacji to uprawnienia czasu działania, musisz poprosić o te uprawnienia w czasie działania z deklaracją w pliku manifestu.

Wykrywanie lokalnych urządzeń Bluetooth

Jeśli chcesz, aby aplikacja inicjowała wykrywanie urządzenia lub wykorzystywała Bluetooth musisz zadeklarować BLUETOOTH_ADMIN uprawnienia. Większość aplikacji potrzebuje tego uprawnienia wyłącznie po to, aby wykrywać lokalnych urządzeń Bluetooth. Nie używaj innych umiejętności zapewnianych przez tę funkcję chyba że aplikacja jest „menedżerem zasilania” która zmienia ustawienia Bluetootha na żądanie użytkownika. Zadeklaruj uprawnienia w pliku manifestu aplikacji. Dla: przykład:

<manifest>
...
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
</manifest>

Jeśli aplikacja obsługuje usługę i może działać na Androidzie 10 (poziom interfejsu API 29) lub Androida 11, musisz również zadeklarować ACCESS_BACKGROUND_LOCATION do wykrywania urządzeń Bluetooth. Więcej informacji na ten temat Więcej informacji znajdziesz w sekcji Lokalizacja dostępu do .

Ten fragment kodu pokazuje, jak zadeklarować ACCESS_BACKGROUND_LOCATION uprawnienie:

<manifest>
...
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
</manifest>

Więcej informacji o deklarowaniu uprawnień aplikacji znajdziesz w dokumentacji <uses-permission>.

Określanie użycia funkcji Bluetooth

Jeśli Bluetooth jest kluczowym elementem Twojej aplikacji, możesz dodać flagi do pliku manifestu wskazujący to wymaganie. Element <uses-feature> zezwala określ typ sprzętu używanego przez aplikację oraz to, czy

Ten przykład pokazuje, jak wskazać, że klasyczny Bluetooth jest wymagany na urządzeniu .

<uses-feature android:name="android.hardware.bluetooth" android:required="true"/>

Jeśli Twoja aplikacja korzysta z Bluetooth Low Energy, możesz użyć tych funkcji:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

Jeśli oświadczysz, że dana funkcja jest wymagana w Twojej aplikacji, Sklep Google Play ukryje ją przed użytkownikami na urządzeniach, które nie mają tych funkcji. Z tego powodu należy ustawiać wymagany atrybut na true tylko wtedy, gdy aplikacja nie będzie działać do danej funkcji.

Sprawdzanie dostępności funkcji w czasie działania

Aby udostępnić aplikację na urządzeniach, które nie obsługują klasycznego Bluetootha lub BLE, nadal musisz umieścić element <uses-feature> w tagu pliku manifestu, ale ustaw required="false". Następnie w czasie działania możesz określić, dostępności funkcji przy użyciu 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);