I want to open multiple images from the Android gallery using "Intent.EXTRA_ALLOW_MULTIPLE" intent filter:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(Intent.createChooser(intent, "Add images"), SELECT_MULTIPLE_IMAGES);
}
But whatever app I use (native gallery, QuickPic app), I can only select one single picture. The test device is running Android 5.1.
How can I pick multiple images?
This is currently working in one of my recent live application which covers selection of images using Gallary for 4.4 and above and below that using writing your own custom gallery.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
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"), SELECT_IMAGE_REQUEST_GALLERY);
}catch(Exception e){
Intent photoPickerIntent = new Intent(this, XYZ.class);
startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);
}
} else {
Intent photoPickerIntent = new Intent(this, XYZ.class);
startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);
}
/**
* Extra used to indicate that an intent can allow the user to select and
* return multiple items. This is a boolean extra; the default is false. If
* true, an implementation is allowed to present the user with a UI where
* they can pick multiple items that are all returned to the caller. When
* this happens, they should be returned as the {@link #getClipData()} part
* of the result Intent.
*
* @see #ACTION_GET_CONTENT
* @see #ACTION_OPEN_DOCUMENT
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (data.getData() != null) {
try {
files.clear();
Uri uri = data.getData();
String url = FileUtils2.getPath(this, uri);
assert url != null;
File file = new File(url);
files.add(file);
mPresenter.postAnnexData(files);
} catch (Exception e) {
e.printStackTrace();
}
} else {
//If uploaded with the new Android Photos gallery
ClipData clipData = data.getClipData();
files.clear();
if (clipData != null) {
for (int i = 0; i < clipData.getItemCount(); i++) {
ClipData.Item item = clipData.getItemAt(i);
Uri uri = item.getUri();
String url = FileUtils2.getPath(this, uri);
assert url != null;
File file = new File(url);
files.add(file);
}
}
mPresenter.postAnnexData(files);
}
}
}
Instead of
startActivityForResult(Intent.createChooser(intent, "Add images"), SELECT_MULTIPLE_IMAGES);
Try
startActivityForResult(intent, SELECT_MULTIPLE_IMAGES); (Deprecated)
Or
someActivityResultLauncher.launch(intent);
Avoid Using
Intent.createChooser
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With