当前位置: 首页 > 知识库问答 >
问题:

从android文件系统中选择多个文件

秋飞鸾
2023-03-14

在尝试从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
  }

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

共有2个答案

上官高畅
2023-03-14

当我们选择多个文件时,结果位于ClipData下,因此我们需要从数据中获取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及以上。

时才俊
2023-03-14

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

请注意,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)
            }
        }
    }
}
 类似资料:
  • 我正在开发一个Android应用程序,其中一个功能是让用户选择要打开的文件(我想打开一个纯文本的.txt文件)。我以前用Java开发过Android应用程序,但这次我使用的是Kotlin,而且这是我第一次使用Kotlin。 我现在让应用程序显示一个文件选择器,让用户点击他们想要打开的文件。然后我尝试使用File对象打开文件并执行forEachLine循环。但是由于某种原因,它抛出了一个java.i

  • 问题内容: 如何选择多个文件? 问题答案: 新答案: 在HTML5中,您可以添加属性以选择多个文件。 旧答案: 每个只能选择1个文件。如果要发送多个文件,则必须使用多个输入标签或使用Flash或Silverlight。

  • 嗨,我想从特定文件夹中获取图像。现在我使用此代码: 现在,有了这个uri,我看到了最近的,我必须手动打开文件夹。我尝试设置uri。用我的文件夹路径解析输入,但我还是得到了我最近的。如何自动打开文件夹?

  • 问题内容: 如何选择多个文件? 问题答案: 在HTML5中,您可以添加multiple属性以选择多个文件。 旧答案: 每个只能选择1个文件。如果要发送多个文件,则必须使用多个输入标签或使用Flash或Silverlight。

  • 我使用expo下载了一张图片(a.jpg),代码如下: 文件成功保存在文件系统中。后来当我试图读取文件时,我得到一个错误,文件无法读取。用于读取文件的代码: 上面的代码返回文件无法读取的错误。fileInfo.exists是true,因为文件存在于文件系统中。 读取文件时出错: 如果我尝试读取一个文本文件(a.json),而不是jpg(a.jpg),那么一切都很好。所以,文件系统。readAsSt

  • 文件系统是负责文件管理的操作系统的一部分。 它提供了一种机制来存储数据和访问文件内容,包括数据和程序。一些操作系统将所有内容视为Ubuntu文件。 文件系统处理以下问题 - 文件结构 - 前面已经了解可存储文件的各种数据结构。文件系统的任务是保持最佳的文件结构。 恢复可用空间 - 每当文件从硬盘中删除时,磁盘中都会创建一个可用空间。 可能有很多这样的空间需要被恢复,以便将它们重新分配给其他文件。