要解决Android Studio API 29中蓝牙扫描不起作用的问题,可以尝试以下解决方法:
// 检查并请求蓝牙和位置权限
private void requestPermissions() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_PERMISSION_LOCATION);
} else {
// 已有权限,开始扫描
startBluetoothScan();
}
}
// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_PERMISSION_LOCATION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予,开始扫描
startBluetoothScan();
} else {
// 权限被拒绝,显示错误或提示信息
}
}
}
// 检查并启用蓝牙
private void enableBluetooth() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// 设备不支持蓝牙
// 显示错误或提示信息
return;
}
if (!bluetoothAdapter.isEnabled()) {
Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetoothIntent, REQUEST_ENABLE_BLUETOOTH);
} else {
// 蓝牙已启用,开始扫描
startBluetoothScan();
}
}
// 处理蓝牙启用请求结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_ENABLE_BLUETOOTH) {
if (resultCode == RESULT_OK) {
// 蓝牙已启用,开始扫描
startBluetoothScan();
} else {
// 蓝牙启用请求被拒绝,显示错误或提示信息
}
}
}
private void startBluetoothScan() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// 设备不支持蓝牙
// 显示错误或提示信息
return;
}
// 开始蓝牙扫描
bluetoothAdapter.startDiscovery();
// 注册蓝牙扫描广播接收器
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(bluetoothReceiver, filter);
}
// 蓝牙扫描广播接收器
private final BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() {
@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 (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
// 扫描结束
// 处理扫描结果
}
}
};
// 停止蓝牙扫描
private void stopBluetoothScan() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// 设备不支持蓝牙
// 显示错误或提示信息
return;
}
if (bluetoothAdapter.isDiscovering()) {
bluetoothAdapter.cancelDiscovery();
}
}
// 在Activity生命周期方法中注册和注销广播接收器
@Override
protected void onResume() {
super.onResume();
registerReceiver(bluetoothReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
registerReceiver(bluetoothReceiver, new