【问题标题】:Selecting multiple files from android file system从android文件系统中选择多个文件
【发布时间】:2018-01-04 09:47:11
【问题描述】:

在尝试从 android 文件系统中选择图像时,我目前正在使用以下代码:

public void getPhotoFromSystem(View v) //implement selecting multiple files
{
    Intent intent = new Intent();
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*)");
    startActivityForResult(intent, READ_REQUEST_CODE);
}

后跟方法如:

    public void onActivityResult(int requestCode, int resultCode, Intent resultData)
  {  
            if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK){
                uri = resultData.getData();
                //do some more stuff
  }

这可行,但实际上不允许我一次选择多个文件,也不允许我在默认照片库之外抓取照片。我尝试了一些我见过的其他建议,但没有任何效果。

【问题讨论】:

  • 您只是想获取一个 uri。好吧,如果您选择多个图像,那么就会有多个 uri。所以试着抓住它们。大多数情况下,如果用户选择了多个,则一个 ur 为空。请确认。
  • 您应该区分用户能够选择多个图像。和你的代码来获取所有的uris。现在还不清楚。进一步请提及所用设备的 Android 版本。
  • 使用更好的 MIME 类型可能会有所帮助。在任何 MIME 类型中都没有 )

标签: java android


【解决方案1】:

我从您那里了解到的问题是您需要一次性选择多个图像。

请注意,Android 的选择器在某些设备上提供了照片和图库。照片允许选择多个图像。图库一次只允许一个。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*"); //allows any image file type. Change * to specific extension to limit it
//**These following line is the important one!
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURES); //SELECT_PICTURES is simply a global int used to check the calling intent in onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == SELECT_PICTURES) {
        if(resultCode == Activity.RESULT_OK) {
            if(data.getClipData() != null) {
                int count = data.getClipData().getItemCount();
                int currentItem = 0;
                while(currentItem < count) {
                    Uri imageUri = data.getClipData().getItemAt(currentItem).getUri();
                    //do something with the image (save it to some directory or whatever you need to do with it here)
                    currentItem = currentItem + 1;
                }
            } else if(data.getData() != null) {
                String imagePath = data.getData().getPath();
                //do something with the image (save it to some directory or whatever you need to do with it here)
            }
        }
    }
}

【讨论】:

  • 我必须重新编写大量代码才能使其正常工作,但这正是我正在寻找的解决方案。
【解决方案2】:

当我们选择多个文件时,结果在ClipData下,所以我们需要从data中获取ClipData,然后遍历其他他们得到Uri的号码。

 if (data.getClipData()!=null){
        //multiple data received
        ClipData clipData = data.getClipData();
        for (int count =0; count<clipData.getItemCount(); count++){
            Uri uri = clipData.getItemAt(count).getUri());
            //do something 
        }
    }

注意:这适用于 API 级别 16 及以上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多