android - adapter.getBluetoothLeScanner() 在某些 Android 6.0 设备上返回 null

标签 android bluetooth-lowenergy

我的应用程序适用于 BLE 设备并按以下方式搜索它们 (API 21+):

adapter.getBluetoothLeScanner().startScan(filters, scanSettings, this);

它适用于大多数设备(例如三星),但在某些 LGE 和 HTC 设备(使用 Android 6.0)上返回 null 并崩溃:

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'void android.bluetooth.le.BluetoothLeScanner.startScan(java.util.List, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback)' on a null object reference

该应用程序针对棉花糖之前的 android,因此(应该)授予权限。

最佳答案

我认为您可以在 adapter.enable() 之后立即调用 startScan。 因为 BluetoothAdapter.enable() 是一个异步调用,所以你可能会得到 NullPointer 异常,你可以尝试注册广播接收器来接收 BluetoothAdapter 状态,如下所示。

    private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                    BluetoothAdapter.ERROR);
            switch (state) {
                case BluetoothAdapter.STATE_OFF:
                    break;
                case BluetoothAdapter.STATE_TURNING_OFF:
                    break;
                case BluetoothAdapter.STATE_ON:
                    //to check if BluetoothAdapter is enable by your code
                    if(enableFlag){
                      adapter.getBluetoothLeScanner().startScan(filters, scanSettings, callBack);
                    }
                    break;
                case BluetoothAdapter.STATE_TURNING_ON:
                    break;
            }
        }
    }
};

关于android - adapter.getBluetoothLeScanner() 在某些 Android 6.0 设备上返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34878071/

相关文章:

ios 核心蓝牙与外部 BLE 设备配对

android - LinearLayout(水平) - 交换按钮位置

android - 使用 Google Play 商店安装依赖的 apk

android - 远程 logcat - Android Studio

android - 以编程方式检测 BLE 连接参数的更改

c - 如何通过 BLE 发送 float 据并在 UART 上正确显示(nRF 工具箱)

android - 一个简单的 50 项列表是否足以证明使用 ListView 是合理的?

android - 在方向改变时重新启动应用程序(Oncreate)

linux - iBeacon 仿真 ubuntu 报错

javascript - 使用 react-native-ble-manager 获取可用蓝牙设备的列表