Android Bluetooth 问题:BluetoothAdapter enable 方法失效
问题描述与处理策略
1、问题描述
BluetoothAdapter enable 方法失效
-
在 Android 开发中,BluetoothAdapter 类提供了对本地蓝牙适配器的访问
-
从 Android 6.0(API 级别 23)开始,enable 方法已经被废弃,并且可能不再起作用,因为 Android 系统对蓝牙的管理方式发生了变化,应用程序不再能够直接启用或禁用蓝牙
-
在 Android 6.0 及更高版本中,用户可以手动启用蓝牙,或者通过系统的蓝牙设置对话框来请求用户启用蓝牙
-
如果应用程序需要开启蓝牙,应该检查蓝牙是否已启用,并在未启用时引导用户到系统设置去启用它
- 检测并引导用户开启蓝牙的合理步骤如下
-
检查蓝牙是否已启用:使用
BluetoothAdapter.isEnabled
方法来检查蓝牙是否已启用 -
请求用户启用蓝牙:如果蓝牙未启用,使用
BluetoothAdapter.ACTION_REQUEST_ENABLE
这个 Intent 来启动一个活动,该活动会请求用户启用蓝牙 -
处理用户响应:当用户响应了启用蓝牙的请求后,处理结果,在 onActivityResult 方法中检查用户是否同意了启用蓝牙
-
继续蓝牙操作:一旦用户启用了蓝牙,继续蓝牙操作,例如,扫描设备、连接设备等
2、处理策略
// 假设原来是这样的
BluetoothManager bluetoothManager = (BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
Log.i(TAG, "BluetoothAdapter isEnabled: " + bluetoothAdapter.isEnabled());
if (!bluetoothAdapter.isEnabled()) {
boolean enable = bluetoothAdapter.enable();
Log.i(TAG, "BluetoothAdapter enable result: " + enable);
}
// 需要修改成这样的
BluetoothManager bluetoothManager = (BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
Log.i(TAG, "BluetoothAdapter isEnabled: " + bluetoothAdapter.isEnabled());
if (!bluetoothAdapter.isEnabled()) {
ActivityResultLauncher<Intent> register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result == null) {
Log.i(TAG, "开启蓝牙失败:result 为 null");
return;
}
int resultCode = result.getResultCode();
if (resultCode != Activity.RESULT_OK) {
Log.i(TAG, "开启蓝牙失败:resultCode 为 " + resultCode);
return;
}
Log.i(TAG, "开启蓝牙成功:resultCode 为 " + resultCode);
}
});
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
register.launch(intent);
}