首页 > 解决方案 > 如何将 startActivityForResult() 更改为 ActivityResultLauncher?

问题描述

我是 Android Studio 的超级初学者。我正在尝试打开相册并获取图像,并且 startActivityForResult() 已被弃用。如何使用 ActivityResultLauncher 更改我的代码?

public class AddPhotoActivity extends AppCompatActivity implements View.OnClickListener {

    private ActivityAddPhotoBinding binding;

    private String Url;

    private FirebaseStorage firebaseStorage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = DataBindingUtil.setContentView(this, R.layout.activity_add_photo);

        binding.addphotoBtnUpload.setOnClickListener(this);


        //Open Album
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        startActivityForResult(intent, PICK_IMAGE_FROM_ALBUM);

        // Firebase storage
        firebaseStorage = FirebaseStorage.getInstance();

     
        binding.addphotoImage.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent, PICK_IMAGE_FROM_ALBUM);
            }
        });
    }

标签: javaandroid

解决方案


你应该。

 ActivityResultLauncher<String> mGetContent = registerForActivityResult(new GetContent(),
    new ActivityResultCallback<Uri>() {
        @Override
        public void onActivityResult(Uri uri) {
            // Handle the returned Uri
        }
});

@Override
public void onCreate(@Nullable savedInstanceState: Bundle) {
    // ...
    
    binding.addphotoImage.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/*");
        }
    });
}

推荐阅读