【发布时间】:2017-02-03 17:35:06
【问题描述】:
我正在从我的应用启动相机来拍照。它也可以在图库中找到。
常见的问题是如何知道照片的路径。建议的解决方案是:
- 自己保存路径,然后使用
EXTRA_OUTPUT发送过来 - 从图库中的最后一张照片开始。
解决方案 1 isn't reliable.
我正在尝试使用以下代码使解决方案 2 工作:
public static String getTakenPhotoPath(Context context) {
try {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null, null);
int column_index_data = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToLast();
return cursor.getString(column_index_data);
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
这不会返回最新照片的路径;它返回前一个。在询问最新照片的路径之前,我正在这样做:
private void addToGallery(Uri urlType, String path) {
if (!Strings.isNullOrEmpty(path)) {
ContentValues values = new ContentValues();
// Add the date meta data to ensure the image is added at the front of the gallery
values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis());
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.MediaColumns.DATA, path);
getContentResolver().insert(urlType, values);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(new File(path));
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
}
}
【问题讨论】:
-
解决方案 2 的可靠性远不如解决方案 1。相机应用程序不需要将
MediaStore索引图像,更不用说及时这样做了。请参阅this answer 了解我推荐的ACTION_IMAGE_CAPTURE分类。 -
解决方案 1 是可靠的。我从未见过它失败。
-
@greenapps:您还没有看到 Stack Overflow 上的所有人都报告各种相机应用程序的问题。
ACTION_IMAGE_CAPTURE根本没有经过太多测试,一些开发人员没有阅读有关ACTION_IMAGE_CAPTURE应该如何工作的文档。请参阅this rant of mine from 2015 了解更多信息。 -
你为什么不直接打电话给你的
Uri.getPath()onActivityResult -
@CommonsWare 不是
CWAC cam -2更好的选择吗?
标签: android android-camera-intent