You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12下Kontakt.io Beacon扫描异常问题求助

Android 12(API 31)下Kontakt.io Beacon扫描异常解决方案

针对你遇到的API 31下扫描Beacon异常问题,结合Android 12蓝牙权限和扫描行为的变化,给出以下排查和修复步骤:

1. 补全蓝牙扫描相关权限的细节配置

Android 12对蓝牙权限做了拆分,除了常规的BLUETOOTH_SCAN、BLUETOOTH_CONNECT运行时权限,必须注意:

  • 清单文件中必须保留<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,Beacon扫描依赖位置权限,即使你的App不涉及位置功能。
  • 不要给BLUETOOTH_SCAN添加neverForLocation权限标记,这个标记会限制扫描范围到已配对设备,直接导致无法发现未配对的Beacon。
  • 运行时申请权限时,必须同时请求ACCESS_FINE_LOCATION和BLUETOOTH_SCAN,且确保用户全部授权。

2. 处理后台扫描的系统限制

Android 12严格限制后台蓝牙扫描行为,默认只能扫描已配对设备,这是你遇到“示例App触发后才能扫描”的核心原因:

  • 示例App启动扫描时大概率开启了前台位置服务,拉高了系统蓝牙扫描优先级,让你的App能共享扫描会话;一旦重启,系统恢复限制,你的App又无法扫描。
  • 解决方法二选一:
    • 申请ACCESS_BACKGROUND_LOCATION权限(需用户主动授权,属于敏感权限);
    • 给你的扫描逻辑绑定前台服务,在清单中声明服务的前台类型为location:
      <service
          android:name=".BeaconScanForegroundService"
          android:foregroundServiceType="location"
          android:exported="false" />
      
      启动扫描前先启动这个前台服务,确保后台扫描不受限制。

3. 核对Kontakt SDK的初始化与配置

  • 确保你使用的Kontakt SDK版本和示例App完全一致(建议升级到v7.0+,该版本专门适配了API 31)。
  • 检查扫描模式和主动扫描设置,示例App默认可能开启了主动扫描:
    BeaconManager beaconManager = BeaconManager.newInstance(context);
    // 后台扫描推荐使用LOW_LATENCY模式
    beaconManager.setScanMode(ScanMode.LOW_LATENCY);
    // 开启主动扫描,确保能发现被动广播的Beacon
    beaconManager.setActiveScan(true);
    

4. 排查签名与硬件支持配置

  • 检查清单文件是否添加了BLE硬件支持声明:
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
    
  • 确认你的App签名没有触发系统权限的特殊限制(示例App用官方签名,可能有系统白名单权限,你的App需要确保权限申请流程合规)。

5. 日志定位问题

  • 开启Kontakt SDK的调试日志,查看扫描过程中的错误:
    KontaktSDK.setDebugLoggingEnabled(true);
    
  • 通过adb logcat -s BluetoothAdapter BluetoothScanner查看系统蓝牙日志,确认是否有扫描被系统拦截的提示。

内容的提问来源于stack exchange,提问作者Alon Minski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:05:19