【问题标题】:How to let user select only local files using Intent in Android?如何让用户在 Android 中使用 Intent 仅选择本地文件?
【发布时间】:2018-02-24 09:33:35
【问题描述】:

我需要让用户从他们的本地存储中为我的应用程序选择一个文件。现在我使用INTENT.ACTION_GET_CONTENT 让用户选择文件,但它也提供了从云中选择URI 的选项。获得 URI 文件后,我将其视为本地文件并执行各种操作(包括提取文件扩展名)。如何让用户只选择本地文件?

else if(menuItem.getItemId() == R.id.action_import_from_file){
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUEST_CODE_SELECT_FILE_FOR_IMPORT);
}

【问题讨论】:

    标签: android android-intent uri android-file


    【解决方案1】:

    请尝试使用Intent.EXTRA_LOCAL_ONLY 喜欢
    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
    如果您设备中的图库应用支持它,则只会显示本地存储中的文件。如果画廊应用不支持上述意图,您可以在检查画廊应用返回的文件路径的文件长度后向用户显示错误消息。

    【讨论】:

      【解决方案2】:

      试试这个

       Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
       intent.setType("image/*");
       intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
       startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR);
      

      尝试使用setType() 方法并指定用户选择的文件类型

      Intent i = new Intent(Intent.ACTION_GET_CONTENT);
      i.setType("application/pdf|application/x-excel|text/csv");
      startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUEST_CODE_SELECT_FILE_FOR_IMPORT);
      

      您还可以使用 MIME 类型数组,如下代码所示

      Intent i = new Intent(Intent.ACTION_GET_CONTENT);
      String[] types = {"application/x-excel/*", "application/csv/*",};
      i.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
      startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUEST_CODE_SELECT_FILE_FOR_IMPORT);
      

      【讨论】:

      • xlsx 和 csv 文件是否属于应用程序?我正在从 excel 文件、csv 文件等导入数据集。
      【解决方案3】:

      仅对打开的 csv 和 xlsx 文件尝试此操作 它只会选择 csv 和 xlsx 文件

          Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
          intent.addCategory(Intent.CATEGORY_OPENABLE);
          intent.setType("*/*");
          String[] mimetypes = {"application/vnd.openxmlformats- 
          officedocument.spreadsheetml.sheet", "text/csv"}; 
          intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
          startActivityForResult(intent, READ_REQUEST_CODE);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-16
        • 2021-03-20
        • 1970-01-01
        • 2016-05-07
        • 2021-10-10
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        相关资源
        最近更新 更多