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
相关产品推荐
相关产品推荐

