遗留项目中不依赖AndroidX使用ActivityResultLauncher的方法
无需依赖AndroidX的Activity结果处理方案
在非AndroidX的遗留项目中,你可以使用传统的startActivityForResult() + onActivityResult()组合来替代AndroidX的ActivityResultLauncher,具体实现步骤如下:
1. 定义唯一请求码
先声明一个常量作为请求标识,避免不同的Activity请求结果混淆:
private static final int REQUEST_CODE_TARGET = 1000; // 可根据业务自定义数值
2. 启动目标Activity
直接调用startActivityForResult()方法启动需要返回结果的Activity:
Intent intent = new Intent(this, YourTargetActivity.class); // 可按需传递参数到目标Activity intent.putExtra("KEY_PARAM", "需要传递的数据"); startActivityForResult(intent, REQUEST_CODE_TARGET);
3. 处理返回结果
重写Activity的onActivityResult()方法,根据请求码和结果码处理返回数据:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 匹配对应的请求码 if (requestCode == REQUEST_CODE_TARGET) { // 判断操作结果 if (resultCode == RESULT_OK) { // 从返回的Intent中提取数据 String resultData = data != null ? data.getStringExtra("KEY_RESULT") : null; // 执行后续业务逻辑 } else if (resultCode == RESULT_CANCELED) { // 用户取消操作的处理逻辑 } } }
补充:权限请求的替代方案
如果是处理权限请求(对应AndroidX的ActivityResultContracts.RequestPermission),同样可以用传统API实现:
// 定义权限请求码 private static final int REQUEST_CODE_PERMISSION = 1001; // 发起权限请求 requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_PERMISSION); // 处理权限请求结果 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE_PERMISSION) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限已授予,执行对应操作 } else { // 权限被拒绝,提示用户或做降级处理 } } }
注意事项
- 请求码需保证全局唯一,避免不同请求的结果处理冲突
- 如果在Fragment中使用,
startActivityForResult()和onRequestPermissionsResult()的调用逻辑一致,Fragment的对应方法会优先于宿主Activity被触发
内容的提问来源于stack exchange,提问作者Fauricio Valencia
相关产品推荐
相关产品推荐

