Uri.fromFile()
给出了一个文件的URI,而不是内容的URI,这是你想要的。
至于如何得到这个,我建议你看到this answer,因为它涵盖了从内容URI到内容URI的转换。
相关的代码,稍加修改,以符合您的媒体类型(图片):“为什么不Uri.fromFile(文件)给了我这个”
/**
* Gets the MediaStore video ID of a given file on external storage
* @param filePath The path (on external storage) of the file to resolve the ID of
* @param contentResolver The content resolver to use to perform the query.
* @return the video ID as a long
*/
private long getImageIdFromFilePath(String filePath,
ContentResolver contentResolver) {
long imageId;
Log.d(TAG,"Loading file " + filePath);
// This returns us content://media/external/images/media (or something like that)
// I pass in "external" because that's the MediaStore's name for the external
// storage on my device (the other possibility is "internal")
Uri imagesUri = MediaStore.Images.getContentUri("external");
Log.d(TAG,"imagesUri = " + imagessUri.toString());
String[] projection = {MediaStore.Images.ImageColumns._ID};
// TODO This will break if we have no matching item in the MediaStore.
Cursor cursor = contentResolver.query(imagesUri, projection, MediaStore.Images.ImageColumns.DATA + " LIKE ?", new String[] { filePath }, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(projection[0]);
imageId = cursor.getLong(columnIndex);
Log.d(TAG,"Image ID is " + imageId);
cursor.close();
return imageId;
}
- 因为某些原因,你想要的是来自MediaStore ContentProvider的'Uri'。 “我怎么能得到这个?” - 查询'MediaStore'' ContentProvider'。不管你是否会在那里找到你的具体文件还有另一个问题。 – CommonsWare