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

遗留项目中不依赖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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:09:25