【问题标题】:How to get last image captured with camera in android? [duplicate]如何在android中使用相机拍摄最后一张图像? [复制]
【发布时间】:2013-11-19 07:38:35
【问题描述】:

我的目的不是拍照,然后将其保存到 sd 卡,获取链接和所有内容。图片已经用安卓中的原始相机应用拍摄了。

我只需要它,我怎样才能获得相对于 sd 卡的图像路径,例如

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

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

【问题讨论】:

  • 您可以获取文件捕获时的日期和时间,并与所有文件的时间和日期进行比较,然后替换为更大的时间
  • 您可以在MediaStore中查询最新条目,见stackoverflow.com/questions/8337585/…
  • @GalBen-Haim 我在发布此问题之前已经看到了该答案,但对答案感到困惑。你能链接一些教程吗?我认为是 sqllite android 教程。

标签: android android-camera


【解决方案1】:

我是这样完成的:

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());

【讨论】:

  • 非常感谢您的回复,您的代码很有意义,我喜欢尝试一下,让您知道结果。
  • 相机不会强制将其图像保存在“DCIM”文件夹中。这不应被视为一般解决方案。它可以在带有某些相机应用程序的某些设备上运行,但在其他设备上则失败。
【解决方案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 包括与 Content Provider 类中的抽象方法(插入、删除、查询、更新)相对应的 CRUD(创建、读取、更新、删除)方法。 Content Resolver 不知道与之交互的 Content Providers 的实现(也不需要知道);每个方法都传递一个 URI,该 URI 指定要与之交互的 Content Provider。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多