Android 从摄影机恢复真实路径';s图片
我正在从相机拍摄照片并保存在一个公共文件夹(Pictures/myFolder)中,我正在存储照片中的Uri以重新加载到我的视图中,但我需要构建一个具有真实路径的文件,但我无法恢复路径,并且他们在internet上找到的所有代码都给了我空指针,我如何恢复真实路径 Uri示例:Android 从摄影机恢复真实路径';s图片,android,Android,我正在从相机拍摄照片并保存在一个公共文件夹(Pictures/myFolder)中,我正在存储照片中的Uri以重新加载到我的视图中,但我需要构建一个具有真实路径的文件,但我无法恢复路径,并且他们在internet上找到的所有代码都给了我空指针,我如何恢复真实路径 Uri示例: content://media/content://br.com.technolog.darwinchecklist.fileprovider/darwin_checklist_images/DARWIN_20180827
content://media/content://br.com.technolog.darwinchecklist.fileprovider/darwin_checklist_images/DARWIN_20180827_114154_460340375.jpg/images/media
不起作用的方法
public String getRealPathFromURI(Uri uri) {
String path = "";
if (getContentResolver() != null) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
path = cursor.getString(idx);
cursor.close();
}
}
return path;
}参考:
我使用以下代码从Uri获取文档的真实路径:
/**
* Retrieve filename from Uri
*
* @param uri Uri following the schemes: "file" or "content"
* @param contentResolver ContentResolver to resolve content scheme
*
* @return filename if operation succeded. Can be null.
*/
public static String getFileName(@NonNull final Uri uri, @NonNull final ContentResolver contentResolver) {
String filename = "";
if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
filename = uri.getLastPathSegment();
} else if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
try {
Cursor cursor = contentResolver.query(uri, null, null, null, null);
int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
cursor.moveToFirst();
filename = cursor.getString(index);
cursor.close();
} catch (Exception e) {
Log.e(TAG, "Exception when retrieving file name: " + e.getMessage());
}
}
return filename;
}
相同错误:android.database.CursorIndexOutOfBoundsException:Requested column:-1,共列数:0相同错误:android.database.CursorIndexOutOfBoundsException:Requested column:-1,共列数:0使用日志打印uri.getPath()和uri.toString()输出@FelipeCustódior,并确保您获得了读取外部存储权限我非常确定,因为我有权限检查,我正在安卓22
content://media/content://br.com.technolog.darwinchecklist.fileprovider/darwin_checklist_images/DARWIN_20180827_114154_460340375.jpg/images/media
似乎不对。您希望在DARWIN\u 20180827\u 114154\u 460340375.jpg
文件中找到/images/media
文件夹。
/**
* Retrieve filename from Uri
*
* @param uri Uri following the schemes: "file" or "content"
* @param contentResolver ContentResolver to resolve content scheme
*
* @return filename if operation succeded. Can be null.
*/
public static String getFileName(@NonNull final Uri uri, @NonNull final ContentResolver contentResolver) {
String filename = "";
if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
filename = uri.getLastPathSegment();
} else if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
try {
Cursor cursor = contentResolver.query(uri, null, null, null, null);
int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
cursor.moveToFirst();
filename = cursor.getString(index);
cursor.close();
} catch (Exception e) {
Log.e(TAG, "Exception when retrieving file name: " + e.getMessage());
}
}
return filename;
}