最近在做一个Android平台的app,使用到了蓝牙功能,在中文互联网上查阅资料,普遍的做法是使用意图请求系统API:
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
但是,startActivityForResult这个方法在新的安卓版本中是被删除了的,新版本中更推荐使用的是
ActivityResultLauncher 的方式,如下:
ActivityResultLauncher<Intent> startBlueTooth = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result)
{
if (result==null)
{
Log.e("error:" "打开失败");
}
else
{
if (result.getResultCode() == RESULT_CANCELED)
{
Log.d("debug", "用户取消");
}
}
}
});
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// 如果设备不支持蓝牙
if (bluetoothAdapter == null)
{
return;
}
// 设备支持蓝牙功能,启动蓝牙
if (!bluetoothAdapter.isEnabled())
{
startBlueTooth.launch(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));
}
但是如果不对 BluetoothAdapter 进行判空,直接使用的话出现了App崩溃的情况,判空后自然是直接return,踩坑后发现,需要在清单文件中配置蓝牙权限,AndroidManifest.xml 文件中加入:
<uses-permission android:name="android.permission.BLUETOOTH" />
为了避免之后再遇到麻烦,干脆将所有蓝牙相关的权限都配置:
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />