自学内容网 自学内容网

Android Bluetooth 问题:BluetoothAdapter enable 方法失效

问题描述与处理策略

1、问题描述
BluetoothAdapter enable 方法失效
  1. 在 Android 开发中,BluetoothAdapter 类提供了对本地蓝牙适配器的访问

  2. 从 Android 6.0(API 级别 23)开始,enable 方法已经被废弃,并且可能不再起作用,因为 Android 系统对蓝牙的管理方式发生了变化,应用程序不再能够直接启用或禁用蓝牙

  3. 在 Android 6.0 及更高版本中,用户可以手动启用蓝牙,或者通过系统的蓝牙设置对话框来请求用户启用蓝牙

  4. 如果应用程序需要开启蓝牙,应该检查蓝牙是否已启用,并在未启用时引导用户到系统设置去启用它

  • 检测并引导用户开启蓝牙的合理步骤如下
  1. 检查蓝牙是否已启用:使用BluetoothAdapter.isEnabled 方法来检查蓝牙是否已启用

  2. 请求用户启用蓝牙:如果蓝牙未启用,使用 BluetoothAdapter.ACTION_REQUEST_ENABLE 这个 Intent 来启动一个活动,该活动会请求用户启用蓝牙

  3. 处理用户响应:当用户响应了启用蓝牙的请求后,处理结果,在 onActivityResult 方法中检查用户是否同意了启用蓝牙

  4. 继续蓝牙操作:一旦用户启用了蓝牙,继续蓝牙操作,例如,扫描设备、连接设备等

2、处理策略
// 假设原来是这样的

BluetoothManager bluetoothManager = (BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE);

BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();

Log.i(TAG, "BluetoothAdapter isEnabled: " + bluetoothAdapter.isEnabled());

if (!bluetoothAdapter.isEnabled()) {
    boolean enable = bluetoothAdapter.enable();
    Log.i(TAG, "BluetoothAdapter enable result: " + enable);
}
// 需要修改成这样的

BluetoothManager bluetoothManager = (BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE);

BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();

Log.i(TAG, "BluetoothAdapter isEnabled: " + bluetoothAdapter.isEnabled());

if (!bluetoothAdapter.isEnabled()) {
    ActivityResultLauncher<Intent> register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result == null) {
                        Log.i(TAG, "开启蓝牙失败:result 为 null");
                        return;
                    }
                    int resultCode = result.getResultCode();
                    if (resultCode != Activity.RESULT_OK) {
                        Log.i(TAG, "开启蓝牙失败:resultCode 为 " + resultCode);
                        return;
                    }

                    Log.i(TAG, "开启蓝牙成功:resultCode 为 " + resultCode);
                }
            });

    Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    register.launch(intent);
}

原文地址:https://blog.csdn.net/weixin_52173250/article/details/144805086

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!