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

startActivityForResult已弃用,求基于ActivityX的新API适配方案

适配已弃用的startActivityForResult,改用Activity Result API

AndroidX 推荐使用Activity Result API替代已弃用的startActivityForResult和onActivityResult,以下是针对你现有代码的完整适配方案:


1. 定义全局的ActivityResultLauncher

在你的Activity类中添加一个全局的ActivityResultLauncher,用来绑定启动Activity后的回调逻辑(替代原来的onActivityResult):

private final ActivityResultLauncher<Intent> addPackLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            // 原onActivityResult中的逻辑完全迁移到这里
            if (result.getResultCode() == Activity.RESULT_CANCELED) {
                Intent data = result.getData();
                if (data != null) {
                    final String validationError = data.getStringExtra("validation_error");
                    if (validationError != null) {
                        if (BuildConfig.DEBUG) {
                            MessageDialogFragment.newInstance(R.string.title_validation_error, validationError)
                                    .show(getSupportFragmentManager(), "validation error");
                        }
                        Log.e(TAG, "Validation failed:" + validationError);
                    }
                } else {
                    new StickerPackNotAddedMessageFragment()
                            .show(getSupportFragmentManager(), "sticker_pack_not_added");
                }
            }
        }
);

2. 修改第一个启动Activity的方法

替换原来的startActivityForResult调用为launcher.launch():

private void launchIntentToAddPackToSpecificPackage(String identifier, String stickerPackName, String whatsappPackageName) {
    Intent intent = createIntentToAddStickerPack(identifier, stickerPackName);
    intent.setPackage(whatsappPackageName);
    try {
        addPackLauncher.launch(intent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, R.string.add_pack_fail_prompt_update_whatsapp, Toast.LENGTH_LONG).show();
    }
}

3. 修改第二个启动Activity的方法

同样替换startActivityForResult调用:

//处理WhatsApp被设为默认应用的情况,仍希望用户看到两个选项
private void launchIntentToAddPackToChooser(String identifier, String stickerPackName) {
    Intent intent = createIntentToAddStickerPack(identifier, stickerPackName);
    try {
        addPackLauncher.launch(Intent.createChooser(intent, getString(R.string.add_to_whatsapp)));
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, R.string.add_pack_fail_prompt_update_whatsapp, Toast.LENGTH_LONG).show();
    }
}

4. 删除旧的onActivityResult方法

原有的onActivityResult方法可以直接删除,因为逻辑已经完全迁移到ActivityResultLauncher的回调中。


注意事项

  • 确保你的Activity继承自AppCompatActivity(AndroidX标准Activity),registerForActivityResult方法仅在AndroidX组件中可用。
  • 无需再使用ADD_PACK常量,回调与launcher直接绑定,不需要通过requestCode区分请求。
  • 原有的异常捕获逻辑完全保留,不影响原有业务提示。

内容的提问来源于stack exchange,提问作者Amator425

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:35:25