图片文件位于 RESULT_CANCELED
Picture File on RESULT_CANCELED
我希望能够在使用默认相机玻璃器皿拍摄照片时跟踪图像文件名。这样我就可以在完成后删除它们。我有以下代码:
...
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_OK) {
String imgPath = data.getStringExtra(Intents.EXTRA_PICTURE_FILE_PATH);
mService.addToImageQueue(imgPath);
}
else if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_CANCELED) {
...
}
}
如果我点击,resultCode returns RESULT_OK
。当我关闭(向下滑动)时,我得到 resultCode RESULT_CANCELED
。这就是我打算让它工作的方式,除了它仍然会生成图像文件,即使 resultCode 是 RESULT_CANCELED
...老实说,我觉得这可能是一个错误,因为我尝试使用 data.getStringExtra(Intents.EXTRA_PICTURE_FILE_PATH);
并得到了一个NullPointerException
。难道我做错了什么?有没有办法在 RESULT_CANCELED
上获取此文件名?
您可以先创建一个临时文件(参见this tutorial中的createImageFile()
方法)。如果创建成功,做两件事:
- 将此文件的路径保存为字符串。
- 在 intent extra 中包含此文件的 URI (
putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile))
)。
如果 resultCode 为 RESULT_CANCELED
,您现在可以追溯到临时文件的路径并对其调用 delete()
。
下面是一些示例代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
Log.v("MainActivity", "Result successful.");
} else if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_CANCELED) {
Log.v(TAG, "Result canceled. Uri of file is " + mCurrentPhotoPath);
File file = new File(mCurrentPhotoPath);
if (file.exists()) {
Log.v(TAG, "File exists.");
if(file.delete()) {
Log.v(TAG, "File was successfully deleted!");
} else {
Log.v(TAG, "File not successfully deleted.");
}
} else {
Log.v(TAG, "File does not exist!");
}
}
}
注意:要使 new File(mCurrentPhotoPath)
生效,请从 mCurrentPhotoPath
的开头删除 "file:"。
我希望能够在使用默认相机玻璃器皿拍摄照片时跟踪图像文件名。这样我就可以在完成后删除它们。我有以下代码:
...
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_OK) {
String imgPath = data.getStringExtra(Intents.EXTRA_PICTURE_FILE_PATH);
mService.addToImageQueue(imgPath);
}
else if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_CANCELED) {
...
}
}
如果我点击,resultCode returns RESULT_OK
。当我关闭(向下滑动)时,我得到 resultCode RESULT_CANCELED
。这就是我打算让它工作的方式,除了它仍然会生成图像文件,即使 resultCode 是 RESULT_CANCELED
...老实说,我觉得这可能是一个错误,因为我尝试使用 data.getStringExtra(Intents.EXTRA_PICTURE_FILE_PATH);
并得到了一个NullPointerException
。难道我做错了什么?有没有办法在 RESULT_CANCELED
上获取此文件名?
您可以先创建一个临时文件(参见this tutorial中的createImageFile()
方法)。如果创建成功,做两件事:
- 将此文件的路径保存为字符串。
- 在 intent extra 中包含此文件的 URI (
putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile))
)。
如果 resultCode 为 RESULT_CANCELED
,您现在可以追溯到临时文件的路径并对其调用 delete()
。
下面是一些示例代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
Log.v("MainActivity", "Result successful.");
} else if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_CANCELED) {
Log.v(TAG, "Result canceled. Uri of file is " + mCurrentPhotoPath);
File file = new File(mCurrentPhotoPath);
if (file.exists()) {
Log.v(TAG, "File exists.");
if(file.delete()) {
Log.v(TAG, "File was successfully deleted!");
} else {
Log.v(TAG, "File not successfully deleted.");
}
} else {
Log.v(TAG, "File does not exist!");
}
}
}
注意:要使 new File(mCurrentPhotoPath)
生效,请从 mCurrentPhotoPath
的开头删除 "file:"。