如何在Android中使用文件选择器从外部存储中选择文件

Wai Yan Hein

我在使用Android中的文件选择器从外部存储中选择图像文件时遇到问题。这个问题是这个问题的结果-在Android中使用Retrofit上载图像文件时,没有此类文件或目录错误我的问题是在活动结果上打开并从外部存储读取文件。我想将结果URI转换为File。

我从活动结果的下载文件夹中读取了pdf文件

Uri bookUri = data.getData();
                if(bookUri!=null)
                {
                    String filePath = bookUri.toString();//bookUri.toString()
                    String mime = app.getMimeType(filePath);
                    if(mime!=null && !mime.isEmpty() && (mime.toLowerCase()=="application/pdf" || mime.toLowerCase()=="application/txt" || mime.toLowerCase()=="application/text"))
                    {
                        bookFile = new File(bookUri.getPath());
                        ivBookFile.setImageResource(R.drawable.book_selected);
                    }
                    else{
                        Toast.makeText(getBaseContext(),"Unable to process file you have chosen.",Toast.LENGTH_SHORT).show();
                    }
                }

如您所见,我使用了新的File(bookUri.getPath()); 转换为文件。上面的代码运行良好。这是工作。现在的问题是,我正在尝试在活动结果上的DCIM / Camera文件夹中打开图像文件。

这是我使用的代码

Uri selectedImageUri = data.getData();
                if(selectedImageUri!=null)
                {
                    try{
                        bmpCoverImage = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri);
                        imageFile = new File(selectedImageUri.getPath());
                        if(bmpCoverImage!=null)
                        {
                            ivCoverImage.setImageBitmap(bmpCoverImage);
                        }
                    }
                    catch (IOException e)
                    {
                        Toast.makeText(getBaseContext(),"An error occurred with the file selected",Toast.LENGTH_SHORT).show();
                    }
                }

如您所见,我使用了新的File(selectedImageUri.getPath()); 就像我在阅读pdf文件时所做的一样。这次代码不起作用。当我像上一个问题那样对文件进行操作时,它给了我错误。

我也用这种方式

imageFile = new File(Environment.getExternalStorageDirectory(),selectedImageUri.getPath());

我遇到了同样的错误。如何从外部存储器正确打开图像文件?如何将所选文件URI从外部存储转换为File?

在此处输入图片说明

常用软件

我在使用Android中的文件选择器从外部存储中选择图像文件时遇到问题

如果您引用的是此问题中使用的代码,那么您不是在“使用文件选择器”。您正在使用ACTION_GET_CONTENT,它从来都不是“文件选择器”,也永远不会是“文件选择器”。

我想将结果URI转换为File。

通常,这不是必需的。但是,如果这是您要执行的操作:

  • 使用ContentResolveropenInputStream()获取InputStream由代表的内容Uri

  • FileOutputStream在您想要的文件上创建一个

  • 使用Java I / O将字节从中复制InputStreamFileOutputStream

上面的代码运行良好。这是工作。

它适用于您测试的少数设备,也适用于用户选择处理ACTION_GET_CONTENT请求的特定活动它不适用于大多数Android设备,并且在大多数情况下也不起作用。该代码唯一起作用的时间是如果Uri有一个file方案。大多数时候,它不会。相反,它将有一个content方案,表示由提供的内容ContentProvider

请问如何从外部存储器正确打开图像文件?

如果您希望继续使用ACTION_GET_CONTENT,请理解,这与外部存储没有任何关系您没有在外部存储或其他位置获取文件。你得到一个Uri这类似于URL,例如此网页的URL。正如URL不一定指向硬盘驱动器上的文件一样,URLUri不一定指向文件系统上的文件。使用ContentResolverDocumentFile来处理和Uri及其标识的内容。

如果您希望始终在外部存储设备上获取文件(并且在其他任何地方都没有),请使用实际的文件选择器库

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为日期选择器创建外部javascript和外部css文件以及如何在Eclipse中使用它

来自分类Dev

使用选择器从外部存储加载文件

来自分类Dev

如何在Libreoffice 6.2.2.2中使用KDE文件选择器?

来自分类Dev

如何在我的应用程序中使用 Safari 的输入文件选择器?

来自分类Dev

如何在浏览器中使用一个驱动器文件选择器?

来自分类Dev

如何在浏览器中使用一个驱动器文件选择器?

来自分类Dev

存储从选择器中选择的值以在其他视图中使用-SwiftUI

来自分类Dev

Android Kotlin:获取FileNotFoundException并从文件选择器中选择文件名?

来自分类Dev

如何在日期时间选择器中选择时间

来自分类Dev

Android:通过Storage Access Framework从URI中使用意图选择器打开文件

来自分类Dev

如何在JQuery中使用动态选择器

来自分类Dev

如何在选择器中使用参数Tapgesture

来自分类Dev

如何在特定选择器中使用Expect?

来自分类Dev

如何在on方法jQuery中使用多个选择器?

来自分类Dev

如何在表选择器中使用 jQuery 变量

来自分类Dev

如何在 jQuery 中使用 .not 选择器?

来自分类Dev

如何在 scss 中使用祖父选择器

来自分类Dev

如何在包含选择器中使用井号 (£)?

来自分类Dev

如何在Xamarin中为Android 5.0以上版本实现打开文件选择器?

来自分类Dev

.puz文件选择器-Android

来自分类Dev

如何对齐使用文件选择器的Bootstrap 4按钮?

来自分类Dev

如何使用Android Studio创建文件选择器对话框

来自分类Dev

如何在Delphi中选择文件

来自分类Dev

如何从Android的库中选择多个文件?

来自分类Dev

在文件选择器Java中选择后显示文件信息

来自分类Dev

无法在MARSHAMALLOW文件选择器中选择pdf,doc,ppt之类的文件

来自分类Dev

如何在Cytoscape.js中使用:not选择器?(选择没有属性的节点)

来自分类Dev

在实体框架存储库中使用选择器

来自分类Dev

在实体框架存储库中使用选择器

Related 相关文章

  1. 1

    如何为日期选择器创建外部javascript和外部css文件以及如何在Eclipse中使用它

  2. 2

    使用选择器从外部存储加载文件

  3. 3

    如何在Libreoffice 6.2.2.2中使用KDE文件选择器?

  4. 4

    如何在我的应用程序中使用 Safari 的输入文件选择器?

  5. 5

    如何在浏览器中使用一个驱动器文件选择器?

  6. 6

    如何在浏览器中使用一个驱动器文件选择器?

  7. 7

    存储从选择器中选择的值以在其他视图中使用-SwiftUI

  8. 8

    Android Kotlin:获取FileNotFoundException并从文件选择器中选择文件名?

  9. 9

    如何在日期时间选择器中选择时间

  10. 10

    Android:通过Storage Access Framework从URI中使用意图选择器打开文件

  11. 11

    如何在JQuery中使用动态选择器

  12. 12

    如何在选择器中使用参数Tapgesture

  13. 13

    如何在特定选择器中使用Expect?

  14. 14

    如何在on方法jQuery中使用多个选择器?

  15. 15

    如何在表选择器中使用 jQuery 变量

  16. 16

    如何在 jQuery 中使用 .not 选择器?

  17. 17

    如何在 scss 中使用祖父选择器

  18. 18

    如何在包含选择器中使用井号 (£)?

  19. 19

    如何在Xamarin中为Android 5.0以上版本实现打开文件选择器?

  20. 20

    .puz文件选择器-Android

  21. 21

    如何对齐使用文件选择器的Bootstrap 4按钮?

  22. 22

    如何使用Android Studio创建文件选择器对话框

  23. 23

    如何在Delphi中选择文件

  24. 24

    如何从Android的库中选择多个文件?

  25. 25

    在文件选择器Java中选择后显示文件信息

  26. 26

    无法在MARSHAMALLOW文件选择器中选择pdf,doc,ppt之类的文件

  27. 27

    如何在Cytoscape.js中使用:not选择器?(选择没有属性的节点)

  28. 28

    在实体框架存储库中使用选择器

  29. 29

    在实体框架存储库中使用选择器

热门标签

归档