列出Android中的所有相机图像

hpi*_*que 13 camera android gallery mediastore android-contentresolver

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

是通过MediaStore吗?怎么样?

hpi*_*que 37

图库应用通过使用获取的相机图像内容解析器超过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());
}
Run Code Online (Sandbox Code Playgroud)

基于此,这是一个获取所有相机图像的片段:

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;
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看Gallery应用程序源代码的ImageManager和ImageList类.

  • 我们应该讨厌HTC Desire HD. (27认同)
  • 并非所有设备都将拍摄的图像/视频保存到"/ DCIM/Camera".HTC渴望高清,例如,保存到"/ DCIM/100MEDIA" (5认同)
  • 但是,您可以使用File api而不是使用DB游标列出所有文件. (3认同)