获取所有 Android 设备图像

Getting all Android device images

我需要根据添加日期获取我的 android 设备的所有图像,因此我尝试了以下代码:

String[] projection = new String[]{
    MediaStore.Images.ImageColumns._ID,
    MediaStore.Images.ImageColumns.DATA,
    MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
    MediaStore.Images.ImageColumns.DATE_TAKEN,
    MediaStore.Images.ImageColumns.MIME_TYPE};
mImageCursor = getContentResolver().query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection,
    null,
    null,
    MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");
mImageCursor.moveToFirst();

它在大多数设备上运行良好,但问题出现在 Nexus 5 上,我听说它崩溃了。不幸的是,我没有 Nexus 5 来检查日志,但我认为这可能是因为 Nexus 5 没有 SD 卡,对吗?解决方法是什么?

从 Android 5.0 开始,您需要 READ_EXTERNAL_STORAGE 进行一些 MediaStore 操作,从 Android 6.0 开始,如果您的 targetSdkVersion 是 23 或更高,这需要您使用运行时权限系统。具体来说,您需要使用 requestPermissions() 来提示用户授予您从外部存储读取的能力,因为这被认为是 dangerous 权限。

如果您的 targetSdkVersion 为 22 或更低,并且 Android 6.0 用户通过“设置”应用手动撤销了您的 READ_EXTERNAL_STORAGE 权限,我不太确定这是什么行为关于 MediaStore,因为我还没有尝试过那个特定的场景。