这个问题的主要思想和标题一样——当你从Android中的uri中获得文件的真实路径时,. getPath()和cursor之间的区别是什么?
如果你不明白我使用光标的意思,这个例子就在这里。
private String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file path
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
cursor.close();
}
return result;
}
最常见的两种方法是这两种,但使用游标似乎有点太复杂,而使用一种简单的方法可以得到相同的结果。getPath()。所以,我认为在某些情况下,我应该使用光标是有原因的,但我无法理解。
你能解释一下是什么吗?
什么是区别. getPath()与游标,当你得到一个文件的真实路径在Android的uri?
Uri
不是文件。没有“真正的道路”。
如果Uri
的方案是file
,那么它代表文件系统上的一个文件,理论上,你的应用程序应该能够访问该文件。使用getPath()
获取文件系统路径。
如果该方案是其他方案,那么它不一定代表文件系统中应用程序可以访问的文件。例如,如果方案是http
或https
,则Uri
表示将从Web服务器下载的内容。
如果方案是内容
,则由内容提供者
支持。使用ContentResolver
和openInputStream()
对Uri
标识的内容获取InputStream
。
如果方案是内容
,并且您专门从MediaStore
获取了Uri
,那么您的光标
方法可能会为您提供一条路径。它还可能给你提供null
,你可能无法访问你获得的路径(仅仅因为系统的MediaStore
可以索引文件并不意味着你的应用程序可以访问同一个文件)。在Android10上情况更糟,默认情况下,您没有外部存储的读取权限。因此,这种技术不可靠,不应使用。
不过,除此之外,您不能对使用什么数据来支持内容
Uri
做出任何假设。可能是:
外部存储器上的本地文件
- 另一个应用程序(例如,
FileProvider
)的内部存储上的本地文件。 - 可移动存储上的本地文件
- 加密的本地文件,需要由
ContentProvider动态解密
- 数据库中
BLOB
列中的字节流,需要ContentProvider提供服务
需要其他应用程序先下载的内容(例如Dropbox)
- 。。。等等
所以,简单地说:
Uri
不是一个文件。没有“真正的道路”。
createOrReplace eTempView和as函数别名火花sql查询使用的区别是什么? 我试图理解这两种方法之间的区别。
我正在开发一款。我将启动意图的转换为字符串,它会给我。但我需要找到真正的路径。 例如:
我想从图库中选择一个图像,然后使用它将图像加载到ImageView项中。 但是图像没有以正确的方式旋转,所以我应该使用ExifInterface类,并且exif构造函数希望文件的路径是字符串,而不是URI。 为了将URI转换为字符串,我编写了以下方法: 问题从这里开始... 结果变量总是返回null。我尝试了stackoverflow中的许多解决方案,如下所示: 我试图用null值查询投影。仍然返
我试图从Xamarin Android中的intent chooser获得真正的路径,它在除Android 10之外的所有Android版本中都能正常工作。在Android10中,内容uri如下 content://com.android.providers.downloads.documents/document/msf:180
我想从URI中获得完整的文件路径。URI不是图像,而是音乐文件,但如果我像纵隔解决方案那样做,如果应用程序用户选择eg Astro作为浏览器,而不是音乐播放器,它就不会工作。我怎么解决这个?
问题内容: 我需要在WebContent目录中获取文件的真实路径,以便我使用的框架可以访问该文件。它仅将String文件作为属性,因此我需要在WebContent目录中获取此文件的真实路径。 我使用Spring Framework,因此应该可以在Spring中解决。 问题答案: 如果您在servlet中需要此功能,请使用!