Intent.ACTION_GET_CONTENTで複数のファイルを選択する 質問する

Intent.ACTION_GET_CONTENTで複数のファイルを選択する 質問する

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)
                    }
                }
            }
        }
    }

おすすめ記事