Bluetooth-Berechtigungen

Um Bluetooth-Funktionen in Ihrer App zu verwenden, müssen Sie mehrere Berechtigungen Sie sollten auch angeben, ob für Ihre App Bluetooth Classic oder Bluetooth Low Energy (BLE) unterstützt. Wenn Ihr Die App benötigt kein Bluetooth Classic oder BLE, kann aber trotzdem von diesen Funktionen profitieren. können Sie die Verfügbarkeit während der Laufzeit prüfen.

Erklärung von Berechtigungen

Welche Berechtigungen du in deiner App deklarierst, hängt vom Ziel der App ab SDK-Version.

Auf Android 12 oder höher ausrichten

Hinweis : Unter Android 8.0 (API-Level 26) und höher wird die Begleiter Der Gerätemanager (CDM) bietet eine optimierte Methode zum Herstellen einer Verbindung zu Companion-Geräten im Vergleich zu den in diesem Abschnitt beschriebenen Berechtigungen vergleichen. Die Das CDM-System bietet eine UI für die Kopplung im Namen Ihrer App und erfordert keine Berechtigungen zur Standortermittlung.

Wenn du mehr Kontrolle über das Koppeln und Verbinden haben möchtest, verwende die in diesem Abschnitt beschriebenen Berechtigungen.

<ph type="x-smartling-placeholder">
</ph> Dialogfeld „Bluetooth-Berechtigungen“
Dialogfeld „Systemberechtigungen“, in dem der Nutzer aufgefordert wird, Einer App die Berechtigung erteilen, Orte in der Nähe zu finden, zu bewerben und sich mit ihnen zu verbinden Geräte.

Wenn Ihre App auf Android 12 (API-Level 31) oder höher ausgerichtet ist, deklarieren Sie Folgendes: Berechtigungen in der Manifestdatei deiner App:

  1. Wenn Ihre App nach Bluetooth sucht Geräte wie BLE-Peripheriegeräte, deklarieren Sie die BLUETOOTH_SCAN Berechtigung.
  2. Wenn Ihre App das aktuelle Gerät für andere Bluetooth-Geräte sichtbar macht Geräte, deklarieren: BLUETOOTH_ADVERTISE Berechtigung.
  3. Wenn Ihre App über bereits gekoppeltes Bluetooth kommuniziert Geräte, deklarieren Sie BLUETOOTH_CONNECT Berechtigung.
  4. Legen Sie für Ihre alten Bluetooth-bezogenen Berechtigungsdeklarationen Folgendes fest: android:maxSdkVersion in 30. Durch diesen Schritt zur App-Kompatibilität gewähre deiner App nur die Bluetooth-Berechtigungen, die sie bei der Installation auf Geräte mit Android 12 oder höher.
  5. Wenn Ihre App den physischen Standort anhand der Bluetooth-Suchergebnisse ermittelt, geben Sie die ACCESS_FINE_LOCATION Berechtigung. Andernfalls können Sie unsicher behaupten, dass Ihre App nicht Standort

Die Berechtigungen BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT und BLUETOOTH_SCAN sind Laufzeitberechtigungen. Daher müssen Sie den Nutzer explizit anfordern, Genehmigung in deiner App ein, bevor du nach Bluetooth-Geräte aktivieren, Geräte für andere Geräte sichtbar machen oder kommunizieren mit bereits gekoppelten Bluetooth-Geräten Wenn Ihre App mindestens eines der folgenden Elemente anfordert: wird der Nutzer aufgefordert, Ihrer App Zugriff auf diese Berechtigungen zu gewähren, Geräte in der Nähe, wie in Abbildung 1 dargestellt.

Das folgende Code-Snippet zeigt, wie Bluetooth-bezogene Berechtigungen in Ihrer App, wenn sie auf Android 12 oder höher ausgerichtet ist:

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

Behaupten Sie deutlich, dass Ihre App keinen physischen Standort ermittelt.

Nutzt Ihre App die Ergebnisse des Bluetooth-Scans nicht, um den physischen Standort zu ermitteln, kann deutlich machen, dass deine App nie die Bluetooth-Berechtigungen verwendet um den physischen Standort zu ermitteln. Führen Sie dazu die folgenden Schritte aus:

  1. Fügen Sie das Attribut android:usesPermissionFlags zu Ihrem BLUETOOTH_SCAN hinzu Berechtigungsdeklaration und legen Sie den Wert dieses Attributs auf neverForLocation fest.

  2. Wenn der Standort für deine App nicht anderweitig benötigt wird, entferne den ACCESS_FINE_LOCATION aus dem Manifest deiner App.

Das folgende Code-Snippet zeigt, wie Sie die Manifestdatei Ihrer App aktualisieren:

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

Auf Android 11 oder niedriger ausrichten

Wenn Ihre App auf Android 11 (API-Level 30) oder niedriger ausgerichtet ist, deklarieren Sie Folgendes: Berechtigungen in der Manifestdatei deiner App:

  • BLUETOOTH ist erforderlich Bluetooth Classic oder BLE-Kommunikation nutzen, wie z. B. das Anfordern einer Verbindung herstellen, eine Verbindung akzeptieren und Daten übertragen.
  • ACCESS_FINE_LOCATION ist notwendig, da unter Android 11 und niedriger eine Bluetooth-Suche um Informationen über den Standort des Nutzer.

Da es sich bei den Berechtigungen zur Standortermittlung um Laufzeitberechtigungen handelt, Sie müssen diese Berechtigungen zur Laufzeit anfordern und sie in deinem Manifest deklarieren.

Bluetooth-Geräte in der Nähe finden

Wenn deine App die Geräteerkennung initiieren oder Bluetooth manipulieren soll müssen Sie die BLUETOOTH_ADMIN Berechtigung. Die meisten Apps benötigen diese Berechtigung nur, um Bluetooth-Geräte auf Ihrem Gerät Benutze die anderen, durch dieses Programm gewährten Berechtigung, es sei denn, die App ist ein „Energiemanager“ zum Ändern der Bluetooth-Einstellungen auf Anfrage der Nutzenden. Deklariere die Berechtigung in der Manifestdatei deiner App. Für Beispiel:

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

Ob deine App einen Dienst unterstützt und unter Android 10 (API-Level 29) oder Android 11 müssen Sie auch die ACCESS_BACKGROUND_LOCATION Berechtigung, Bluetooth-Geräte zu finden. Weitere Informationen zu diesem Thema siehe Zugriff auf Standort in der Hintergrund.

Das folgende Code-Snippet zeigt, wie ACCESS_BACKGROUND_LOCATION deklariert wird. Berechtigung:

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

Weitere Informationen finden Sie in der <uses-permission>. Weitere Informationen zum Deklarieren von App-Berechtigungen

Nutzung der Bluetooth-Funktion angeben

Wenn Bluetooth ein wichtiger Bestandteil deiner App ist, kannst du deinem Manifest Flags hinzufügen in der diese Anforderung aufgezeigt wird. Die Das Element <uses-feature> ermöglicht kannst du angeben, welche Art von Hardware deine App verwendet und ob sie erforderlich.

In diesem Beispiel wird gezeigt, wie Sie angeben, dass Bluetooth Classic für Ihr

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

Wenn Ihre App Bluetooth Low Energy verwendet, können Sie Folgendes verwenden:

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

Wenn du angibst, dass die Funktion für deine App erforderlich ist, wird der Google Play Store Ihre App vor Nutzern auf Geräten ohne diese Funktionen verbergen. Aus diesem Grund sollten Sie das erforderliche Attribut nur auf true setzen, wenn Ihre App nicht ohne die Funktion.

Verfügbarkeit von Funktionen während der Laufzeit prüfen

Um Ihre App für Geräte verfügbar zu machen, die Bluetooth Classic oder Bluetooth nicht BLE müssen, sollten Sie trotzdem das <uses-feature>-Element im Manifest, aber legen Sie required="false" fest. Während der Laufzeit können Sie dann Funktionen verfügbar sind, indem Sie 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);