【问题标题】:List all camera images in Android列出 Android 中的所有相机图像
【发布时间】:2010-12-19 17:23:30
【问题描述】:

如何获取 Android 设备的所有相机图像列表?

是通过 MediaStore 吗?怎么样?

【问题讨论】:

标签: android camera gallery mediastore android-contentresolver


【解决方案1】:

图库应用通过使用content resolver 而非Images.Media.EXTERNAL_CONTENT_URI 并通过Media.BUCKET_ID 过滤结果来获取相机图像。桶标识符由以下代码确定:

public static final String CAMERA_IMAGE_BUCKET_NAME =
        Environment.getExternalStorageDirectory().toString()
        + "/DCIM/Camera";
public static final String CAMERA_IMAGE_BUCKET_ID =
        getBucketId(CAMERA_IMAGE_BUCKET_NAME);

/**
 * Matches code in MediaProvider.computeBucketValues. Should be a common
 * function.
 */
public static String getBucketId(String path) {
    return String.valueOf(path.toLowerCase().hashCode());
}

基于此,这里有一个获取所有相机图像的 sn-p:

public static List<String> getCameraImages(Context context) {
    final String[] projection = { MediaStore.Images.Media.DATA };
    final String selection = MediaStore.Images.Media.BUCKET_ID + " = ?";
    final String[] selectionArgs = { CAMERA_IMAGE_BUCKET_ID };
    final Cursor cursor = context.getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, 
            projection, 
            selection, 
            selectionArgs, 
            null);
    ArrayList<String> result = new ArrayList<String>(cursor.getCount());
    if (cursor.moveToFirst()) {
        final int dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        do {
            final String data = cursor.getString(dataColumn);
            result.add(data);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return result;
}

有关详细信息,请查看图库应用源代码的 ImageManager 和 ImageList 类。

【讨论】:

  • 并非所有设备都将拍摄的图像/视频保存到“/DCIM/Camera”。例如,HTC 渴望高清保存到“/DCIM/100MEDIA”
  • 我们应该为此讨厌 HTC Desire HD。
  • 但是,您可以使用 File api 列出所有文件,而不是使用 DB 游标。
  • 你能解释一下如何从拇指中获取原始图像路径吗?在这一行: final String data = cursor.getString(dataColumn);你得到缩略图的路径。我需要在我的应用程序中显示缩略图(更快)并保存用于生成该缩略图的图像的副本。
  • @hpique 不仅仅是 HTC 设备具有不同的 CAMERA_IMAGE_BUCKET_NAME 字符串。例如,我的 Jelly Bean Galaxy Nexus 仅返回“相机”。
猜你喜欢
  • 2011-03-02
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多