菜鸟-创作你的创作

startactivityforresult

startActivityForResultAndroid 早期用于「启动 Activity 并接收返回结果」的方法
已在 Android 11(API 30)起被官方标记为废弃(Deprecated)

下面我给你 完整说明 + 旧用法 + 新官方推荐用法(必须会)


一、startActivityForResult 是干嘛的?

👉 启动一个 Activity,并在返回时拿到结果

典型场景:


二、旧用法(已废弃,但你一定会见到)

1️⃣ 启动 Activity

Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, 1001);

2️⃣ 接收返回结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1001 && resultCode == RESULT_OK) {
        String result = data.getStringExtra("result");
    }
}

3️⃣ 返回结果(SecondActivity)

Intent intent = new Intent();
intent.putExtra("result", "Hello");
setResult(RESULT_OK, intent);
finish();


❌ 旧方式的问题

👉 所以被官方废弃


三、✅ 官方推荐:Activity Result API(必须掌握)

✔ 核心思想


四、现代正确写法(强烈推荐)

1️⃣ 注册结果回调

ActivityResultLauncher<Intent> launcher =
        registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == Activity.RESULT_OK) {
                        Intent data = result.getData();
                        if (data != null) {
                            String value = data.getStringExtra("result");
                        }
                    }
                }
        );

2️⃣ 启动 Activity

Intent intent = new Intent(this, SecondActivity.class);
launcher.launch(intent);

3️⃣ 返回结果(和以前一样)

Intent intent = new Intent();
intent.putExtra("result", "Hello");
setResult(Activity.RESULT_OK, intent);
finish();


五、Kotlin 版(现在最常见)

private val launcher =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
        if (it.resultCode == Activity.RESULT_OK) {
            val result = it.data?.getStringExtra("result")
        }
    }

// 启动
launcher.launch(Intent(this, SecondActivity::class.java))


六、常用 ActivityResultContracts

Contract用途
StartActivityForResult启动普通 Activity
TakePicture拍照
PickVisualMedia选图片(推荐)
RequestPermission请求单个权限
RequestMultiplePermissions多权限

七、什么时候还能看到 startActivityForResult

👉 新项目、新功能一律不要再用


八、总结一句话

startActivityForResult 已死,Activity Result API 是未来

退出移动版