蓝牙权限

如需在应用中使用蓝牙功能,您必须声明多项权限。您还应指定应用是否需要支持传统蓝牙或低功耗蓝牙 (BLE)。如果您的应用不需要传统蓝牙或 BLE,但仍可受益于这些技术,则可以在运行时检查可用性

声明权限

您在应用中声明的权限集取决于应用的目标 SDK 版本。

以 Android 12 或更高版本为目标平台

注意 :在 Android 8.0(API 级别 26)及更高版本中,与本部分介绍的权限相比,配套设备管理器 (CDM) 提供了一种更精简的方法来连接到配套设备。CDM 系统会代表您的应用提供配对界面,并且不需要位置权限。

如果您想要更好地控制配对和连接体验,请使用本部分中介绍的权限。

蓝牙权限对话框
系统权限对话框,要求用户授予应用权限以发现、通告和连接到附近的设备。

如果您的应用以 Android 12(API 级别 31)或更高版本为目标平台,请在应用的清单文件中声明以下权限:

  1. 如果您的应用查找蓝牙设备(如 BLE 外围设备),请声明 BLUETOOTH_SCAN 权限。
  2. 如果您的应用使当前设备可被其他蓝牙设备检测到,请声明 BLUETOOTH_ADVERTISE 权限。
  3. 如果您的应用与已配对的蓝牙设备通信,请声明 BLUETOOTH_CONNECT 权限。
  4. 对于旧版蓝牙相关的权限声明,请将 android:maxSdkVersion 设为 30。此应用兼容性步骤有助于系统仅向您的应用授予在搭载 Android 12 或更高版本的设备上安装时所需的蓝牙权限。
  5. 如果您的应用使用蓝牙扫描结果来推导物理位置,请声明 ACCESS_FINE_LOCATION 权限。否则,您可以坚定地断言您的应用不会推导物理位置,并将 ACCESS_FINE_LOCATION 权限的 android:maxSdkVersion 设置为 30。

BLUETOOTH_ADVERTISEBLUETOOTH_CONNECTBLUETOOTH_SCAN 权限是运行时权限。因此,您必须先在应用中明确请求用户批准,然后才能查找蓝牙设备、使某个设备可被其他设备检测到,或者与已配对的蓝牙设备通信。当您的应用请求其中至少一项权限时,系统会提示用户允许您的应用访问附近的设备,如图 1 所示。

以下代码段演示了如何声明应用中与蓝牙相关的权限(如果应用以 Android 12 或更高版本为目标平台):

<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