问题描述: 在Android 9及更高版本中,使用BluetoothAdapter的startDiscovery()方法后,无法找到之前已经找到的设备。
解决方法: Android 9及更高版本对于BluetoothAdapter的startDiscovery()方法做出了一些限制,以提高设备安全性。在这些版本中,设备必须先与用户进行配对才能通过startDiscovery()方法找到设备。下面是一个解决方法的示例代码:
public class BluetoothBroadcastReceiver extends BroadcastReceiver {
private BluetoothAdapter bluetoothAdapter;
public BluetoothBroadcastReceiver(BluetoothAdapter bluetoothAdapter) {
this.bluetoothAdapter = bluetoothAdapter;
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// 处理找到的设备
} else if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// 处理配对请求
device.setPairingConfirmation(true);
device.setPin("1234"); // 设置设备的配对PIN码
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
// 发现设备完成
}
}
}
private BluetoothAdapter bluetoothAdapter;
private BroadcastReceiver bluetoothBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothBroadcastReceiver = new BluetoothBroadcastReceiver(bluetoothAdapter);
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(bluetoothBroadcastReceiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(bluetoothBroadcastReceiver);
}
private void startDiscovery() {
if (bluetoothAdapter.isDiscovering()) {
bluetoothAdapter.cancelDiscovery();
}
bluetoothAdapter.startDiscovery();
}
通过以上代码,你可以在Android 9及更高版本中使用BluetoothAdapter的startDiscovery()方法来找到以前找到的设备。注意,在处理配对请求时,你可能需要根据你的设备进行相应的处理。