我的应用程序适用于 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/