当我从图库中选择图像时,我可以获得该图像的Uri,如下所示:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent result) {
if (requestCode == Crop.REQUEST_PICK && resultCode == RESULT_OK) {
Uri uri = result.getData();
beginCrop(uri);
} else if (requestCode == Crop.REQUEST_CROP) {
handleCrop(resultCode, result);
}
}
上面检索到的Uri的格式为 content:// media / external / images / media / 7266
但是,当我尝试获取刚保存为文件的图像的Uri时,我无法以此格式检索Uri:
Date d = new Date();
CharSequence s = DateFormat.format("MM-dd-yy hh-mm-ss", d.getTime());
Bitmap bitmap = drawView.getResultBitmap();
File sdCardDirectory = Environment.getExternalStorageDirectory();
File image = new File(sdCardDirectory, "DCIM/Camera/" + s.toString() + ".png");
boolean success = false;
// Encode the file as a PNG image.
FileOutputStream outStream;
try {
outStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
/* 100 to keep full quality of the image */
outStream.flush();
outStream.close();
success = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (success) {
MediaScannerConnection.scanFile(getActivity(), new String[]{
image.getAbsolutePath()},
null, new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
}
});
Uri uri = Uri.parse(image.getAbsolutePath());
beginCrop(uri);
从上面代码中获得的Uri是 / storage / emulated / 0 / DCIM / Camera / 02-04-16 12-49-16.png
我相信,这不是正确的Uri格式,而只是绝对文件路径。有没有办法让我能够以 content:// media / external / images / media / 的格式获得Uri?
非常感谢任何帮助
答案 0 :(得分:1)
我相信,这不是正确的Uri格式,而只是绝对文件路径。
你是对的。使用Uri.fromFile()
将File
转换为指向该文件的Uri
。
我是否有办法以格式内容获取Uri:// media / external / images / media /?
不容易。最好在onScanCompleted()
中,您可以运行一些查询来获取Uri
使用的MediaStore
。但是,在此之前,MediaStore
不知道该文件。
您从Uri
获得的Uri.fromFile()
是有效Uri
,但它将采用file
计划,而不是content
计划。
答案 1 :(得分:-1)
你可以像这样从Bitmap获取uri:
Uri getUri(Context context, Bitmap bitmap) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
String path = "";
try {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
path = MediaStore.Images.Media.insertImage(
context.getContentResolver(), bitmap, "Title", null);
} catch (Exception e) {
}
return Uri.parse(path);
}