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

4nt*_*ine 5 android bluetooth-lowenergy

我的应用程序可与BLE设备配合使用,并以以下方式(API 21+)搜索它们:

adapter.getBluetoothLeScanner().startScan(filters, scanSettings, this);
Run Code Online (Sandbox Code Playgroud)

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

由java.lang.NullPointerException引起:尝试在空对象引用

该应用程序的目标是棉花糖前的android,因此应该(应该)授予这些权限。

小智 5

我认为您可能会在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;
            }
        }
    }
};
Run Code Online (Sandbox Code Playgroud)