我正在拍摄一张如下的图片:
activity.startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), BaseDef.REQUEST_CODE_CAMERA);
之后,我只想获取新图像的路径、URI或类似信息(而不是位图或图像数据),以便知道新图像的位置。因此,我尝试像下面这样检索URI:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == BaseDef.REQUEST_CODE_CAMERA)
{
if (resultCode == RESULT_OK)
{
Uri uri = data.getData();
}
}
}
但有时uri是null
。在这种设备上,我怎么才能得到图像路径/uri呢?
编辑
我真的想保留由任何相机应用程序创建的默认文件名!
当前的解决方法(我不知道这是否总是有效):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == BaseDef.REQUEST_CODE_CAMERA)
{
if (resultCode == RESULT_OK)
{
String path = null;
Uri uri = data.getData();
if (uri != null)
path = MediaUtil.getRealPathFromURI(uri);
else
{
L.d(this, "URI == NULL => trying to get last image path directly");
// here I just sort mediastore by id desc and get the first image's path
// can I be sure this ALWAYS works?
// When the camera returns, the image SHOULD be already in the media store
// If not, I would get a wrong image...
path = MediaStoreUtil.getLastImagePath();
}
if (path == null)
{
L.d(this, "Path of camera image could not be retrieved");
return;
}
}
}
}
Environment.DIRECTORY_PICTURES
。这样它们就可以像所有其他照片一样在相册中查看。 - Daniel NugentDCIM/Camera
、DCIM/100Andro
或相机使用的任何目录下。我认为我的应用程序用户期望,如果他使用相机1拍摄图像,则图像将保存在相机1的目录中,如果使用相机2,则应将图像保存在相机2的目录中。我不希望直接通过相机或通过我的应用程序打开相机会影响生成的图像路径(名称也是如此,但这是可以接受的)... - prom85