Pour utiliser les fonctionnalités Bluetooth dans votre application, vous devez déclarer plusieurs autorisations. Vous devez également spécifier si votre application nécessite compatible avec les technologies Bluetooth classique et Bluetooth à basse consommation (BLE). Si votre ne nécessite pas les technologies Bluetooth Classic ni BLE, mais peut tout de même bénéficier de ces technologies, vous pouvez vérifier la disponibilité au moment de l'exécution.
Déclarer des autorisations
L'ensemble d'autorisations que vous déclarez dans votre appli dépend de la cible de celle-ci Version du SDK.
Cibler Android 12 ou version ultérieure
Remarque : Sur Android 8.0 (niveau d'API 26) ou version ultérieure, le Compagnon Le Gestionnaire d'appareils (CDM) permet de se connecter plus facilement par rapport aux autorisations décrites dans cette section. Le système CDM fournit une UI d'association au nom de votre application et ne nécessite pas d'autorisations d'accéder à la position.
Si vous souhaitez avoir plus de contrôle sur l'association et la connexion, utilisez les autorisations décrites dans cette section.
Si votre application cible Android 12 (niveau d'API 31) ou une version ultérieure, déclarez les éléments suivants dans le fichier manifeste de votre application:
- Si votre application recherche une connexion Bluetooth
périphériques
périphériques BLE, déclarez
BLUETOOTH_SCAN
l'autorisation. - Si votre application détecte l'appareil actuel via d'autres appareils Bluetooth
appareils,
déclarez le
BLUETOOTH_ADVERTISE
l'autorisation. - Si votre application communique avec des appareils Bluetooth déjà associés, déclarez l'autorisation
BLUETOOTH_CONNECT
. - Pour les déclarations d'autorisations liées à l'ancien Bluetooth, définissez
De
android:maxSdkVersion
à30
. Cette étape de compatibilité aide le système n'accordez à votre application que les autorisations Bluetooth dont elle a besoin lorsqu'elle est installée sur les appareils équipés d'Android 12 ou version ultérieure. - Si votre application utilise les résultats de la recherche Bluetooth pour déduire la position physique, déclarez l'autorisation
ACCESS_FINE_LOCATION
. Sinon, vous pouvez affirmer avec force que votre application ne dérive pas de la position physique.
Les autorisations BLUETOOTH_ADVERTISE
, BLUETOOTH_CONNECT
et BLUETOOTH_SCAN
sont des autorisations d'exécution.
Par conséquent, vous devez demander explicitement à l'utilisateur
d'approbation dans votre application avant de pouvoir
les appareils Bluetooth, rendre un appareil visible par d'autres appareils ou communiquer ;
avec les appareils Bluetooth
déjà associés. Lorsque votre application demande au moins l'une des
le système invite l'utilisateur à autoriser votre application à accéder
Appareils à proximité, comme illustré dans la figure 1.
L'extrait de code suivant montre comment déclarer la connexion Bluetooth autorisations dans votre application si elle cible Android 12 ou une version ultérieure:
<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>
Affirmez avec force que votre application ne détermine pas la position physique
Si votre application n'utilise pas les résultats de recherche Bluetooth pour déterminer la position géographique, vous peut affirmer avec certitude que votre appli n'utilise jamais les autorisations Bluetooth pour déterminer la situation géographique. Pour ce faire, procédez comme suit :
Ajoutez l'attribut
android:usesPermissionFlags
à votre déclaration d'autorisationBLUETOOTH_SCAN
et définissez sa valeur surneverForLocation
.Si la localisation n'est pas nécessaire pour votre application, supprimez le Autorisation
ACCESS_FINE_LOCATION
du fichier manifeste de votre appli.
L'extrait de code suivant montre comment mettre à jour le fichier manifeste de votre application:
<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>
Cibler Android 11 ou version antérieure
Si votre application cible Android 11 (niveau d'API 30) ou une version antérieure, déclarez les éléments suivants dans le fichier manifeste de votre application:
BLUETOOTH
est nécessaire pour établir une communication Bluetooth classique ou BLE, comme demander un une connexion, l'acceptation d'une connexion et le transfert de données.ACCESS_FINE_LOCATION
est nécessaire, car, sur Android 11 ou version antérieure, une recherche Bluetooth qui pourraient servir à recueillir des informations sur l'emplacement utilisateur.
Étant donné que les autorisations d'accéder à la position sont des autorisations d'exécution, vous devez les demander au moment de l'exécution et les déclarer dans votre fichier manifeste.
Découvrir les appareils Bluetooth locaux
Si vous souhaitez que votre application lance la découverte d'appareils ou manipule les paramètres Bluetooth, vous devez déclarer l'autorisation BLUETOOTH_ADMIN
. La plupart des applis ont besoin de cette autorisation uniquement pour détecter
les périphériques Bluetooth locaux. N'utilisez pas les autres fonctionnalités accordées par cette autorisation, sauf si l'application est un "gestionnaire d'alimentation" qui modifie les paramètres Bluetooth à la demande de l'utilisateur. Déclarez l'autorisation dans le fichier manifeste de votre application. Exemple :
<manifest>
...
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
</manifest>
Si votre application est compatible avec un service et peut s'exécuter sur Android 10 (niveau d'API 29) ou
Android 11, vous devez également déclarer
ACCESS_BACKGROUND_LOCATION
l'autorisation de détecter les appareils Bluetooth. Pour en savoir plus sur cette exigence, consultez Accéder à la position en arrière-plan.
L'extrait de code suivant montre comment déclarer la ACCESS_BACKGROUND_LOCATION
autorisation:
<manifest>
...
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
</manifest>
Consultez le <uses-permission>
pour en savoir plus sur la déclaration d'autorisations d'application.
Spécifier l'utilisation des fonctionnalités Bluetooth
Si le Bluetooth est un élément essentiel de votre application, vous pouvez ajouter des indicateurs à votre fichier manifeste
indiquant cette exigence. La
L'élément <uses-feature>
permet
de spécifier le type de matériel utilisé par votre application et s'il
obligatoire.
Cet exemple montre comment indiquer que la technologie Bluetooth Classic est requise pour votre l'application.
<uses-feature android:name="android.hardware.bluetooth" android:required="true"/>
Si votre application repose sur la technologie Bluetooth Low Energy, vous pouvez utiliser les fonctionnalités suivantes:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
Si vous indiquez que la fonctionnalité est requise pour votre application, le Google Play Store la masquera aux utilisateurs sur les appareils qui ne disposent pas de ces fonctionnalités. Pour cette raison, vous
ne doit définir l'attribut obligatoire sur true
que si votre application ne peut pas fonctionner sans
la fonctionnalité.
Vérifier la disponibilité des fonctionnalités au moment de l'exécution
Pour rendre votre application disponible sur les appareils non compatibles avec la technologie Bluetooth Classic
Avec BLE, vous devez toujours inclure l'élément <uses-feature>
dans le fichier
le fichier manifeste, mais définissez required="false"
. Ensuite, au moment de l'exécution, vous pouvez déterminer la disponibilité des fonctionnalités à l'aide de 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);