蓝牙无法在 Android API 31 或更高版本中以编程方式禁用

问题描述 投票:0回答:2

我试图在单击按钮时禁用蓝牙,但它不起作用

听我做什么

if (SDK_INT >= Build.VERSION_CODES.S) {
    if (checkPermission(Manifest.permission.BLUETOOTH_CONNECT) && checkPermission(Manifest.permission.BLUETOOTH_SCAN)) {
        BluetoothAdapter adapter = ((BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter();
        if (adapter != null) {
            if (adapter.getState() == BluetoothAdapter.STATE_ON) {
                Log.e("BT", "disable");
                adapter.disable();
            } else if (adapter.getState() == BluetoothAdapter.STATE_OFF) {
                if (!adapter.isEnabled()) {
                    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
                }
                Log.e("BT", "enable");
            } else {
                Log.e("BT", "Else");
            }
        } else {
            Toast.makeText(UltimateHomeLauncherActivity.this, "Bluetooth is not supported on your hardware", Toast.LENGTH_SHORT).show();
        }
    } else {
        List<String> deniedPermissions = new ArrayList<>();
        deniedPermissions.add(Manifest.permission.BLUETOOTH_CONNECT);
        deniedPermissions.add(Manifest.permission.BLUETOOTH_SCAN);
        requestRuntimePermissions(1011, deniedPermissions.toArray(new String[0]));
    }
}

我还在清单中添加了蓝牙权限。

<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
java android bluetooth android-bluetooth android-settings
2个回答
4
投票

android.permission.BLUETOOTH_CONNECT
运行时权限,需要用户的同意。

但是,在下一个 API 级别 33 中,BluetoothAdapter 的 enable()/disable() 将被弃用并且不再允许。因此,对于此类功能来说,最好将用户导航到蓝牙系统对话框并要求他在那里打开或关闭该功能。


3
投票

Android 中有两种打开/关闭蓝牙的方法

  1. BluetoothAdapter.enable()
    打开蓝牙

    BluetoothAdapter.disable()
    关闭蓝牙

    这些方法是异步的,并且仅在 API 级别 33 以下工作

  2. 或使用

{ Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(intent, REQUEST_ENABLE_BT); }

打开蓝牙

{ Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISABLE); startActivityForResult(intent, REQUEST_DISABLE_BT); }

关闭蓝牙

执行后,系统对话框将提示用户打开/关闭蓝牙。

一旦打开/关闭 onActivityResult() 覆盖方法将被触发。

就您而言,您正在使用

BluetoothAdapter.disable()
尝试使用其他方法。

注意:常量BluetoothAdapter.ACTION_REQUEST_DISABLE在SDK中使用@hide进行hidden,其值为“android.bluetooth.adapter.action.REQUEST_DISABLE”。您可以直接使用“android.bluetooth.adapter.action.REQUEST_DISABLE”而不是BluetoothAdapter.ACTION_REQUEST_DISABLE。

© www.soinside.com 2019 - 2024. All rights reserved.