一、现象
在新版androidX里面,startActivityForResult()被标注弃用,推荐使用registerForActivityResult()方法
二、解决方案 :
使用registerForActivityResult()方法
但是注意了:
1、registerForActivityResult只能在onCreate()中初始化注册。onstart()之后就不能注册了。
2、registerForActivityResult()方法不要放在setOnClickListener()里面,要放在onCreate里。
使用如图
private ActivityResultLauncher launcher;
public void initActivityResult() {
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == RESULT_OK) {
Logger.d("onActivityResult: data = " + result.getData());
}
}
});
}
//跳转调用
Intent intent = new Intent(this, BaiduASRDigitalDialog.class);
// running = true;
launcher.launch(intent);
三、关于registerForActivityResult()方法
两个参数:
第一个是 ActivityResultContract
第二个是 ActivityResultCallback
返回值:
它返回一个 ActivityResultLauncher 对象
用法:调用 ActivityResultLauncher的 launch方法可以跳转到另一个Activity或者发起权限请求