如何在安卓系统中获取最近一张拍摄的照片?

3

我的意图不是拍照并将其保存到SD卡中,获取链接等。该图像已经由Android中的原始相机应用程序拍摄。

我需要知道如何根据SD卡获取该图像路径,例如

emulated/0/sdcard/DCIM/100ANDRO/image.jpg

我该如何获得最近拍摄的图像的这种格式。


您可以获取文件捕获的日期和时间,并与所有文件的日期和时间进行比较,只需用更大的时间替换即可。 - Akarsh M
1
你可以查询MediaStore获取最新的条目,参见 https://dev59.com/Wmsy5IYBdhLWcg3wxAuO - Gal Ben-Haim
@GalBen-Haim 在发布这个问题之前,我已经看过了那个答案,但是对答案感到困惑。你能否提供一些教程链接,我认为需要 SQLite Android 教程。 - yourkishore
2个回答

3
我是这样完成的:

我是这样完成的:

final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
imageCursor.moveToFirst();
do {
    String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
    if (fullPath.contains("DCIM")) {
        //--last image from camera --
        return;
    }
}
while (imageCursor.moveToNext());

非常感谢您的回复,您的代码很有道理,我很想尝试一下并告诉您结果。 - yourkishore
4
相机不一定强制将其图像保存在“DCIM”文件夹中。这不应被视为一般解决方案。它可能适用于某些设备和相机应用程序,但可能在其他设备上无法正常运行。 - Ionut Negru

2
使用此方法从URI获取文件路径:
Uri selectedImageUri = data.getData();
selectedImagePath = getRealPathFromURI(selectedImageUri);

    public String getRealPathFromURI(Context context, Uri contentUri) {
  Cursor cursor = null;
  try { 
    String[] proj = { MediaStore.Images.Media.DATA };
    cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
  } finally {
    if (cursor != null) {
      cursor.close();
    }
  }
}

Cursor 提供了一个随机读写访问数据库查询结果集的方法。

getContentResolver() 返回一个ContentResolver实例,用于你的应用程序包。

当你想要访问内容提供者中的数据时,你需要使用应用程序上下文中的ContentResolver对象作为客户端与提供者进行通信。ContentResolver对象与提供者对象通信,提供者对象是实现ContentProvider类的一个实例。提供者对象接收来自客户端的数据请求,执行所请求的操作,并返回结果。

Content Resolver包含了CRUD(创建、读取、更新、删除)方法,这些方法对应于Content Provider类中的抽象方法(insert、delete、query、update)。Content Resolver不知道它正在交互的Content Providers的实现方式(也不需要知道),每个方法都传递一个URI,指定要与哪个Content Provider进行交互。

MediaStore: 媒体提供者包含内部和外部存储设备上所有可用媒体的元数据。MediaStore.images包含所有可用图像的元数据


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接