0

我正在使用 Android Oreo 和蓝牙。当找到新设备以及蓝牙适配器更改其状态时,我想从广播信息中获取。我有以下代码:

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    IntentFilter filter2 = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);

    registerReceiver(BEReceiver_ADD, filter);
    registerReceiver(BEReceiver_Adapter, filter2);

为什么我用 BEReceiver_ADD 接收信号而不用 BEReceiver_Adapter?我从不进入 BEReceiver_Adapter。怎么了?

注意:我在 Android 4.1 上尝试了相同的代码,它可以工作。为什么不能使用 Android 8.0?

4

1 回答 1

1

BluetoothAdapter.ACTION_STATE_CHANGED 由蓝牙适配器状态变化产生,如打开/关闭。同样在较新的 android 版本中,获取适配器对象的方法已更改,因此具有向后兼容性的代码应如下所示:

BluetoothAdapter bluetoothAdapter = null;
if(android.os.Build.VERSION.SDK_INT >= 18) { 
     BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE); 
     bluetoothAdapter = bluetoothManager.getAdapter(); 
} else bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

此外,我可能会建议使用来处理 Rfcomm 配置文件 - 因为它显着减少了支持代码的数量并在回调中提供了舒适。

于 2019-02-12T16:07:13.393 回答