startActivityForResult 的替代方案

Alternative for startActivityForResult

我正在尝试使用 picasso 获取图像。由于 startActivityForResult 已贬值,我需要迁移到新的 API 。代码如下.

 private void openFileChooser() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent, PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null && data.getData() != null) {
        mImageUri = data.getData();
        Picasso.get().load(mImageUri).into(productImage);
    }
}

这是迁移到新 Api 的方法。

第 1 步:在您的 class 中声明一个顶部变量,用于从图库中获取图像

ActivityResultLauncher<String> mGetContent = registerForActivityResult(new GetContent(),
    new ActivityResultCallback<Uri>() {
        @Override
        public void onActivityResult(Uri uri) {
            //You are provided with uri of the image . Take this uri and assign it to Picasso
        }
});

第 2 步:现在在您的 OnCreate 中,在您的按钮上设置一个 onClickListener,您希望用户通过该按钮转到图库并按以下方式启动合同:


    selectButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // Pass in the mime type you'd like to allow the user to select
            // as the input
            mGetContent.launch("image/*");
        }
    });

如果您遇到任何错误,请在下方评论