Android 原生新的打开蓝牙策略(替代startActivityForResult)及配置蓝牙权限

发布于:2023-01-22 ⋅ 阅读:(11) ⋅ 点赞:(0) ⋅ 评论:(0)

最近在做一个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" />

网站公告

欢迎关注微信公众号

今日签到

点亮在社区的每一天
签到