Intent を使用して複数のファイルを選択しようとしていますが、何かが足りないようです。Intent.ACTION_GET_CONTENT
Intent を作成し、Intent.EXTRA_ALLOW_MULTIPLE を extra として追加し
(目的に完全に適合しているようです)、複数のファイルを選択して返すことができるアプリケーションを選択する Chooser (オプション) を作成します。
問題は、1 つのファイルしか選択できないことです。
複数のファイルエクスプローラーを試しました。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);
}
});
マニフェストにこれも追加しました (追加する前も同じ機能がありました):
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
なぜ複数のファイルを選択できないのですか?
(明確にするために: 問題は、複数のファイルが返されないことではなく、1 つ以上のファイルを選択できないことです)
ベストアンサー1
私も同じ問題を抱えています。これが私の解決策です。
ジャワ:
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();
}
}
}
}
コトリン:
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)
}
}
}
}
}