从图库中点击选择多张图片

3

我是Android的新手,我编写了从图库选择多个图片的代码,并为此编写了两种实现方式。 在onActivityResult中,我使用data.getClipdata接收每个图片。

这是第一种选择多张图片的方法。

Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), RESULT_LOAD_IMAGE);

这是选择多张图片的第二种方式。

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent,RESULT_LOAD_IMAGE);

我选择了第二种选择多张图片的方法,因为在实现这一点时,对我的应用程序看起来更好,并且我可以通过单击选择多个图像,不再使用第一种方式,因为我必须使用长按选择多个图像。在Android Studio模拟器和Nokia设备USB调试上,一切都很顺利。但是,在一个三星设备上,我根本无法选择图片,而第一种方法却有效。所以我的问题是,如果可能的话,如何在此情况下使用第二种方法实现多个图像,并且这个问题是否也会出现在其他设备上?


我建议使用一个库,Matisse更好。 - Manohar
是的,使用库会更好。 - Arsalan
2个回答

1

正如您在问题中提到的,对于三星设备,应使用选项1,而对于其他设备,则应使用选项2。 因此,只需设置条件并检查当前使用的设备即可。

String deviceName = "Samsung";
if(deviceName.e(android.os.Build.MODEL)){
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), RESULT_LOAD_IMAGE);
}else{
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    startActivityForResult(intent, RESULT_LOAD_IMAGE);
}

@Danial 有任何反馈吗? - Arbaz.in
是的,你的代码有帮助,但在选择多个图像时存在一些问题,因为它发送的是请求而不是命令,所以最好使用一个库。 - Arsalan
Arbaz,我的代码很好,我想说的是intent.extra_allow_multiple是一个请求,因此一些设备会拒绝选择多个图像,这就是为什么我选择库的原因。我没有其他问题了。 - Arsalan
抱歉我的失误,实际上我以为你遇到了这个问题。 - Arbaz.in

1

我尝试了下面的代码,它可以工作。不要检查设备的“型号”,而是检查制造商。这将重定向应用程序以打开文档选择器(而不是默认的相册应用程序),从那里您可以通过菜单导航到“照片”。

public void captureImageFromGallery() {
    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

    String deviceName = "Samsung";
    if(deviceName.equalsIgnoreCase(Build.MANUFACTURER)) {
        intent.setDataAndType(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
    }
    startActivityForResult(intent, REQ_CODE_GALLERY);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接