查找 BLE 服务

问题描述 投票:0回答:1

我正在尝试使用 BLE 将运行 Android 13 的智能手机连接到服务器。 Android 11 连接并查找服务,但 Android 13 找不到它们。我已经尝试了所有有权限的事情

我想找到有关 Android 13 搜索服务的推荐

android bluetooth-lowenergy android-bluetooth android-ble
1个回答
0
投票

在Android 12(API级别31)之前,蓝牙权限与位置权限捆绑在一起。 从 Android 12 开始,Google 将蓝牙权限分为两个不同的权限:BLUETOOTH_SCAN 用于扫描附近的蓝牙设备,以及 BLUETOOTH_CONNECT 用于建立与蓝牙低功耗 (BLE) 设备的连接。

如果您的应用面向 Android 11(API 级别 30)或更低版本,您需要在应用的清单文件中声明以下权限,并且必须打开位置才能扫描

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  • 蓝牙允许连接到蓝牙设备。
  • 扫描蓝牙设备的 ACCESS_FINE_LOCATION 权限。

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

<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
  • BLUETOOTH_CONNECT 权限以连接蓝牙设备。
  • BLUETOOTH_SCAN 扫描蓝牙设备的权限。

neverForLocation 标志是必要的,否则扫描将无法正常工作。

如果您的应用面向 Android 12(API 级别 31)或更高版本且低于 Android 11,请在应用的清单文件中声明以下权限:

<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />

注意:如果您的应用程序面向 Android 12(API 级别 31)或更高版本,并且您正在扫描 BLE 信标设备不要添加标志 neverForLocation 并且必须打开 位置才能扫描

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

我怀疑您尝试连接的 BLE 设备是 BLE 信标(或具有位置服务的设备),因为您在 Android 11 中授予位置权限,它将正常工作。但在 Android 12+ 中可能无法正常工作,请尝试删除

android:usesPermissionFlags="neverForLocation"
android:maxSdkVersion="30"

并在清单中使用以下权限

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

同时打开位置

© www.soinside.com 2019 - 2024. All rights reserved.