registerForActivityResult怎么区别结果是哪个系统界面返回的?

registerForActivityResult怎么区别结果是哪个系统界面返回的?比如点击一个按钮可以选择相册中的照片,点击另一个按钮可以用相机实时照相,但是在回调函数内怎么区分这两个按钮被点击了啊,或者怎么区分返回值是哪个系统界面的?

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

参考GPT和自己的思路:

在使用 registerForActivityResult() 方法时,可以使用不同的 request code 来区分不同的结果。当使用 startActivityForResult() 启动系统界面时,可以将 request code 作为第二个参数传入该方法,然后在回调函数中通过 requestCode 参数来区分不同的结果。可以将不同的 request code 定义在一个常量类中,以便随时引用。例如,可以定义如下常量类:

public class RequestCode {
    public static final int SELECT_PHOTO = 1;
    public static final int TAKE_PHOTO = 2;
}

然后在启动系统界面时,可以按照如下方式:

选取照片:

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RequestCode.SELECT_PHOTO);

拍摄照片:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, RequestCode.TAKE_PHOTO);

在回调函数中,可以通过 requestCode 参数来区分不同的结果,例如:

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

    if (requestCode == RequestCode.SELECT_PHOTO && resultCode == RESULT_OK) {
        // 选取照片的结果
    } else if (requestCode == RequestCode.TAKE_PHOTO && resultCode == RESULT_OK) {
        // 拍摄照片的结果
    } else {
        // 其他结果
    }
}

这样就可以方便地区分不同的系统界面返回的结果。

参考GPT和自己的思路:

感谢您的提问!对于您的问题,有一种比较简单的方法可以区别 registerForActivityResult 返回的结果是哪个系统界面返回的。在触发 registerForActivityResult 的时候,可以通过定义一个 requestCode 来区别不同的操作。这个 requestCode 参数在回调函数内会被带回来,作为区分不同操作返回结果的依据。换句话说,当您在回调函数内收到了某个 requestCode 的返回结果,就知道了是哪个系统界面返回的。

下面是示例代码,假设您有两个按钮,分别触发相册选择和相机拍照:

private static final int REQUEST_CODE_PHOTO_SELECTOR = 1;
private static final int REQUEST_CODE_CAMERA_CAPTURE = 2;

// 相册选择操作
Button photoSelectorBtn = findViewById(R.id.photo_selector_btn);
photoSelectorBtn.setOnClickListener(view -> {
    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, REQUEST_CODE_PHOTO_SELECTOR);
});

// 相机拍照操作
Button cameraCaptureBtn = findViewById(R.id.camera_capture_btn);
cameraCaptureBtn.setOnClickListener(view -> {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, REQUEST_CODE_CAMERA_CAPTURE);
});

// 回调函数
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case REQUEST_CODE_PHOTO_SELECTOR:
                // 处理相册选择结果
                break;
            case REQUEST_CODE_CAMERA_CAPTURE:
                // 处理相机拍照结果
                break;
            default:
                // 其他 requestCode
                break;
        }
    }
}

可以看到,在触发 registerForActivityResult 的时候,给不同的操作定义了不同的 requestCode。在回调函数内,根据 requestCode 的值来区分不同操作的返回结果,进而进行处理。这样的方法比较简单直接,能够满足您的需求。

希望我的回答能够对您有所帮助,祝您工作顺利!