首页 > 解决方案 > 蓝牙适配器.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。

我是否缺少一些权限或方法?还是这是环境问题?任何关于我应该如何处理的建议将不胜感激。

谢谢你。

标签: androidbluetoothandroid-bluetooth

解决方案


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;
    }
}

推荐阅读