You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用RxAndroidBle能否跳过位置权限?非Beacon设备可无权限扫描吗?

关于RxAndroidBle与位置权限的两个问题解答

嘿,针对你提出的两个技术问题,我来给你详细拆解下:

1. 是否可以借助RxAndroidBle跳过位置权限?

答案是不行,这本质上是Android系统层面的权限限制,RxAndroidBle作为上层的封装库,没办法突破系统的规则。具体来说:

  • 在Android 6.0(API 23)到Android 11(API 30)之间,扫描BLE设备必须申请ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限,同时还要确保设备的位置服务处于开启状态;
  • 到了Android 12(API 31)及以上,系统新增了BLUETOOTH_SCAN权限,如果你不需要通过BLE扫描获取位置信息,可以在权限声明里加上android:usesPermissionFlags="neverForLocation",这样就不需要申请位置权限,但这是系统本身提供的特性,RxAndroidBle只是遵循系统规则来调用扫描接口而已。

2. 非Beacon设备使用RxAndroidBle扫描,不申请位置权限能否实现?

这得看你的目标Android版本:

  • Android 11及以下:完全不行。不管你扫描的是不是Beacon设备,系统都强制要求必须有位置权限才能发起BLE扫描。RxAndroidBle底层依赖的是Android原生的BluetoothLeScanner API,而这个API在低版本里对位置权限的要求是硬性的,没有绕开的可能;
  • Android 12及以上:完全可以实现。你只需要完成两步操作:
    1. AndroidManifest.xml里正确声明权限:
      <uses-permission android:name="android.permission.BLUETOOTH_SCAN"
          android:usesPermissionFlags="neverForLocation" />
      
    2. 在代码中动态申请BLUETOOTH_SCAN权限(因为它属于危险权限),之后就可以正常用RxAndroidBle发起扫描了。

另外要提醒一句:如果你的App需要兼容Android 11及以下的设备,那还是得处理位置权限的申请流程,不然在低版本设备上扫描操作会直接失败。

内容的提问来源于stack exchange,提问作者Waqas Ahmed

火山引擎 最新活动