我在使用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。
通常,这不是必需的。但是,如果这是您要执行的操作:
使用ContentResolver
和openInputStream()
获取InputStream
由代表的内容Uri
FileOutputStream
在您想要的文件上创建一个
使用Java I / O将字节从中复制InputStream
到FileOutputStream
上面的代码运行良好。这是工作。
它适用于您测试的少数设备,也适用于用户选择处理ACTION_GET_CONTENT
请求的特定活动。它不适用于大多数Android设备,并且在大多数情况下也不起作用。该代码唯一起作用的时间是如果Uri
有一个file
方案。大多数时候,它不会。相反,它将有一个content
方案,表示由提供的内容ContentProvider
。
请问如何从外部存储器正确打开图像文件?
如果您希望继续使用ACTION_GET_CONTENT
,请理解,这与外部存储没有任何关系。您没有在外部存储或其他位置获取文件。你得到一个Uri
。这类似于URL,例如此网页的URL。正如URL不一定指向硬盘驱动器上的文件一样,URLUri
不一定指向文件系统上的文件。使用ContentResolver
和DocumentFile
来处理和Uri
及其标识的内容。
如果您希望始终在外部存储设备上获取文件(并且在其他任何地方都没有),请使用实际的文件选择器库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句