android - 蓝牙适配器.enable(); 在某些设备中显示没有意图 ACTION_REQUEST_ENABLE 的蓝牙启用提示
问题描述
我想在没有用户交互的情况下使用我的应用启用蓝牙,提示不会出现在我的设备 - Android 7、8 和 9 以及我朋友的 Android 10 上。但它出现在我同事的设备(Android 10)上。
我使用了以下权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
并使用了以下蓝牙适配器方法。
bluetoothAdapter.enable();
bluetoothAdapter.disable();
我的源代码中没有任何意图 ACTION_REQUEST_ENABLE 或 ACTION_REQUEST_DISABLE。
我是否缺少一些权限或方法?还是这是环境问题?任何关于我应该如何处理的建议将不胜感激。
谢谢你。
解决方案
bluetoothAdapter.enable() 将直接运行 com.android.settings/.bluetooth.RequestPermissionHelperActivity,您应该自己监听 ACTION_STATE_CHANGED。
我认为使用 BluetoothAdapter.ACTION_REQUEST_ENABLE 是一种更好的方法,它会先运行 com.android.settings.bluetooth.RequestPermissionActivity 然后再运行 RequestPermissionHelperActivity。RequestPermissionActivity 将监听 ACTION_STATE_CHANGED,而您的应用只需要 Activity.RESULT_OK 的结果代码。
private boolean ensureBluetoothEnabled() {
if(((BluetoothManager) Objects.requireNonNull(getSystemService(Context.BLUETOOTH_SERVICE)))
.getAdapter().isEnabled()) {
return true;
} else {
Intent btIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
btIntent.putExtra(Intent.EXTRA_PACKAGE_NAME, Constants.PACKAGE);
startActivityForResult(btIntent, REQUEST_CODE_BL_OPEN);
return false;
}
}
推荐阅读
- bash - 连接连接字符串
- javascript - 对话流多个并行请求处理
- java - 我不知道如何一一制作代码构建块
- lamar - 如何使用 Lamar 为特定的“T”解析“ILogger”?
- ansible - Jinja2 表达式拆分、替换和连接
- c# - 更改 helix 工具包加载的 STL 模型的颜色(材质)。无法从 Model3DGroup 转换为 GeometryModel3D
- python - 使用腻子找不到目录火花
- delphi - VCL 中的 TEdit Interposer 类属性
- react-native - 使用信号器在连接构建时出错
- aws-lambda - 用于 URL 单击和浏览器用户代理的 AWS 自定义指标