I'm trying to select multiple files with an Intent, but it seems like I'm missing on something.
I create an Intent.ACTION_GET_CONTENT Intent, put Intent.EXTRA_ALLOW_MULTIPLE as extra in
(it seems to perfectly fit the purpose) and create a chooser (optional), which chooses the application that should be able to pick multiple files and return them.
The Problem is that I can only pick a single file.
I tried multiple file explorers.
It's API 18 (4.3).
ACTIVITY_CHOOSE_FILE = 1; //global constant
Button btn = (Button) this.findViewById(R.id.btnGetFiles);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("file/*");
chooseFile.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
}
});
I also added this to the Manifest (it had the same functionality before adding it):
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Why can't I choose multiple files?
(For clarification: the problem is not, that multiple files aren't returned - I can't choose more than 1 file)
Why can't I choose multiple files?
Presumably, the implemeters of "the application that should be able to pick multiple files and return them" have not implemented EXTRA_ALLOW_MULTIPLE
support. Contact them and request this feature.
I got same issue. Here my solution.
Java:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == PICKFILE_RESULT_CODE) {
if(null != data) { // checking empty selection
if(null != data.getClipData()) { // checking multiple selection or not
for(int i = 0; i < data.getClipData().getItemCount(); i++) {
Uri uri = data.getClipData().getItemAt(i).getUri();
}
} else {
Uri uri = data.getData();
}
}
}
}
Kotlin:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
PICKFILE_RESULT_CODE -> if (resultCode === Activity.RESULT_OK) {
if (null != data) {
if (null !=data.clipData) {
for (i in 0 until data.clipData.itemCount) {
val uri = data.clipData.getItemAt(i).uri
dumpImageMetaData(uri)
}
} else {
val uri = data.data
dumpImageMetaData(uri)
}
}
}
}
}
I got the same issue and ACTION_OPEN_DOCUMENT
worked for me.
public void selectImages() {
Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, your_initial_uri);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
startActivityForResult(intent, 1);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
for(int i = 0; i < data.getClipData().getItemCount(); i++) {
Uri uri = data.getClipData().getItemAt(i).getUri();
System.out.println("image" + i + "=" + uri.toString());
}
}
}
}
I know it's a bit outdated post but still if someone encounters it:
in this sample, we open default system file explorer to allow a user select multiple files of any type on his device:
Intent filesIntent;
filesIntent = new Intent(Intent.ACTION_GET_CONTENT);
filesIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
filesIntent.addCategory(Intent.CATEGORY_OPENABLE);
filesIntent.setType("*/*"); //use image/* for photos, etc.
startActivityForResult(filesIntent, REQUEST_CODE_FOR_ON_ACTIVITY_RESULT);