我开发了图像裁剪器,以便用户可以从图库中裁剪所选图像。当用户使用相机拍摄照片或从图库中选择图片时,会查询图像uri以查找图像元数据,并将图像文件路径传递给各种位图方法以创建位图。
但是现在我已经将用户选择选项扩展到了Dropbox,而且我从意图中获得的uri是以下形式:
01-08 09:11:21.051: I/DROPBOX(2761): file:///storage/emulated/0/Android/data/com.dropbox.android/files/u98667695/scratch/Capture.PNG
对此uri的查询为游标返回null,因此我尝试将uri转换为字符串,删除前7个字符并将该字符串作为图像文件路径传递。如果我从Dropbox上的根目录中选择图像,这可以正常工作...
所以,我的问题是如何从外部来源(如Dropbox)获取图像请求以获取图像文件路径时,意图返回uri请求的图像?
这是我检索文件路径的方法:
private void getImageData(Uri selectedImage){
String[] filePathColumn = { MediaStore.Images.Media.DATA };
String[] fileOrientationColumn = { MediaStore.Images.Media.ORIENTATION };
Cursor cursor = context.getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
/* if(cursor == null){
imageFilePath = selectedImage.toString().substring(6);
return;
}
*/ cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageFilePath = cursor.getString(columnIndex);
Log.i("CURSOR path", imageFilePath);
cursor = context.getContentResolver().query(selectedImage,
fileOrientationColumn, null, null, null);
cursor.moveToFirst();
columnIndex = cursor.getColumnIndex(fileOrientationColumn[0]);
String fileOrientation = cursor.getString(columnIndex);
// Izmena
if(fileOrientation == null)fileOrientation = "0";
imageOrientation = Integer.parseInt(fileOrientation);
cursor.close();
Log.i("CURSOR orientation", fileOrientation);
}
答案 0 :(得分:0)
在上述情况下,您可以执行以下操作。
String filePath="I/DROPBOX(2761): file:///storage/emulated/0/Android/data/com.dropbox.android/files/u98667695/scratch/Capture.PNG";
int firstIndex=filePath.indexOf("file");
String actualPath=filePath.subString(firstIndex);
因此,无论根目录或文件位置如何,actualPath都包含如下所需的路径。
actualPath="file:///storage/emulated/0/Android/data/com.dropbox.android/files/u98667695/scratch/Capture.PNG"