使用RxAndroidBle能否跳过位置权限?非Beacon设备可无权限扫描吗?
关于RxAndroidBle与位置权限的两个问题解答
嘿,针对你提出的两个技术问题,我来给你详细拆解下:
1. 是否可以借助RxAndroidBle跳过位置权限?
答案是不行,这本质上是Android系统层面的权限限制,RxAndroidBle作为上层的封装库,没办法突破系统的规则。具体来说:
- 在Android 6.0(API 23)到Android 11(API 30)之间,扫描BLE设备必须申请
ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限,同时还要确保设备的位置服务处于开启状态; - 到了Android 12(API 31)及以上,系统新增了
BLUETOOTH_SCAN权限,如果你不需要通过BLE扫描获取位置信息,可以在权限声明里加上android:usesPermissionFlags="neverForLocation",这样就不需要申请位置权限,但这是系统本身提供的特性,RxAndroidBle只是遵循系统规则来调用扫描接口而已。
2. 非Beacon设备使用RxAndroidBle扫描,不申请位置权限能否实现?
这得看你的目标Android版本:
- Android 11及以下:完全不行。不管你扫描的是不是Beacon设备,系统都强制要求必须有位置权限才能发起BLE扫描。RxAndroidBle底层依赖的是Android原生的
BluetoothLeScannerAPI,而这个API在低版本里对位置权限的要求是硬性的,没有绕开的可能; - Android 12及以上:完全可以实现。你只需要完成两步操作:
- 在
AndroidManifest.xml里正确声明权限:<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> - 在代码中动态申请
BLUETOOTH_SCAN权限(因为它属于危险权限),之后就可以正常用RxAndroidBle发起扫描了。
- 在
另外要提醒一句:如果你的App需要兼容Android 11及以下的设备,那还是得处理位置权限的申请流程,不然在低版本设备上扫描操作会直接失败。
内容的提问来源于stack exchange,提问作者Waqas Ahmed




