You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android蓝牙开发:startActivityForResult已废弃,如何改用registerForActivityResult?

替换废弃的startActivityForResult实现蓝牙启用请求

针对Android官网蓝牙教程中已废弃的startActivityForResult,你可以使用registerForActivityResult配合ActivityResultContracts.StartActivityForResult()来替代,具体实现步骤如下:

1. 声明并初始化ActivityResultLauncher

在你的Activity(或Fragment)的成员变量区域定义启动器,然后在onCreate方法中完成初始化:

// 成员变量声明
private ActivityResultLauncher<Intent> enableBtLauncher;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 初始化蓝牙启用请求的Launcher
    enableBtLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == RESULT_OK) {
                // 用户同意启用蓝牙,处理成功逻辑
                // 比如:Toast.makeText(this, "蓝牙已开启", Toast.LENGTH_SHORT).show();
            } else {
                // 用户拒绝启用蓝牙,处理失败逻辑
                // 比如:Toast.makeText(this, "蓝牙开启被拒绝", Toast.LENGTH_SHORT).show();
            }
        }
    );
}

2. 替换原有的启动逻辑

把原来调用startActivityForResult的代码,替换为调用Launcher的launch方法:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter != null && !bluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    enableBtLauncher.launch(enableBtIntent);
}

注意事项

  • registerForActivityResult必须在组件的生命周期早期(如onCreate、onCreateView)调用,不能在点击事件等懒加载场景中初始化,否则会抛出异常。
  • 回调中的result.getResultCode()对应原onActivityResult方法中的resultCode,RESULT_OK代表用户确认启用蓝牙,其他结果表示用户取消或拒绝。
  • 始终要先判断bluetoothAdapter是否为null,避免空指针异常(部分设备可能不支持蓝牙)。

内容的提问来源于stack exchange,提问作者lr_04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:25:40