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

Android 13中BluetoothLeScanner.startScan报callback null异常求助

排查 IllegalArgumentException: callback is null 异常的建议

针对你在Android 13设备上调用bluetoothLeScanner.startScan(scanCallback)时遇到的问题,结合你已确认的权限配置、bluetoothLeScanner非空的情况,给出以下具体排查方向:

1. 确认scanCallback的初始化时机与非空性

  • 检查scanCallback是否在调用startScan前完成初始化:
    • 如果使用lateinit var声明,确保调用startScan前已执行赋值操作(未初始化的lateinit变量可能被误判为null传递);
    • 如果使用可空类型var scanCallback: ScanCallback? = null,必须在调用startScan前通过空安全检查(比如scanCallback?.let { bluetoothLeScanner.startScan(it) }),避免null被传递;
    • 排查是否存在分支逻辑导致scanCallback未赋值:比如仅在特定条件下初始化scanCallback,但调用startScan时该条件不满足。

2. 检查是否存在变量重名或作用域问题

  • 确认调用startScan时使用的scanCallback是你调试时看到的非空实例:
    • 排查是否存在局部变量与全局变量重名的情况,局部变量未初始化就被传递,而你调试时查看的是全局变量;
    • 直接在startScan调用前添加日志或断点,打印scanCallback的内存地址,确认其不为null。

3. 排查ScanCallback的实现是否存在隐性问题

  • 确保你的ScanCallback实现完整且正确:
    • 避免使用错误方式创建ScanCallback实例(比如误用lambda表达式转抽象类的写法,导致实例为null);
    • 示例正确实现:
      private val scanCallback = object : ScanCallback() {
          override fun onScanResult(callbackType: Int, result: ScanResult?) {
              // 处理扫描结果
          }
      
          override fun onBatchScanResults(results: MutableList<ScanResult>?) {
              // 处理批量扫描结果
          }
      
          override fun onScanFailed(errorCode: Int) {
              // 处理扫描失败
          }
      }
      

4. 确认调用的startScan重载方法正确

  • 检查是否误调用了需要ScanFilter和ScanSettings的重载方法:
    • 比如错误写成bluetoothLeScanner.startScan(emptyList(), null, scanCallback),此时参数位置错误可能引发异常;
    • 确保调用的是单参数重载:bluetoothLeScanner.startScan(scanCallback)。

5. 验证Android 13蓝牙扫描的权限细节

虽然你已确认权限配置,但再核对以下点:

  • Manifest中需配置:
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 若需后台扫描,添加以下权限 -->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
    
  • 确认在运行时已动态申请BLUETOOTH_SCAN和ACCESS_FINE_LOCATION权限(Android 13中BLUETOOTH_SCAN属于危险权限,需动态申请)。

内容的提问来源于stack exchange,提问作者Liza Gildisch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:51:20