获取所有Android设备图像
我需要根据添加日期获取android设备的所有图像,因此我尝试了以下代码:获取所有Android设备图像,android,android-cursor,Android,Android Cursor,我需要根据添加日期获取android设备的所有图像,因此我尝试了以下代码: String[] projection = new String[]{ MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME, MediaStore.Images.ImageColumns.DATE
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();
它在大多数设备上运行良好,但问题出现在Nexus5上,我听说它崩溃了。不幸的是,我没有Nexus5来检查日志,但我认为这可能是因为Nexus5没有sd卡,对吗?解决方案是什么?从Android 5.0开始,对于某些
MediaStore
操作,您需要READ\u EXTERNAL\u STORAGE
,从Android 6.0开始,如果您的targetSdkVersion
为23或更高,则需要使用运行时权限系统。具体来说,您需要使用requestPermissions()
提示用户授予您从外部存储读取的能力,因为这被认为是一种危险的权限
如果您的targetSdkVersion
为22或更低,并且Android 6.0用户通过设置应用程序手动撤销了您的READ\u EXTERNAL\u STORAGE
权限,我不太确定关于MediaStore
的行为是什么,因为我还没有尝试过那种特定的场景。不用担心,您需要首先关注能够收集堆栈跟踪。如果没有发现问题的能力,永远不要发布应用程序。虽然Nexus 5没有SD卡插槽,但您的代码与SD卡插槽无关,MediaStore
通常在Nexus 5上运行良好。Nexus运行android 6,这可能是原因吗?从android 5.0开始,您需要读取外部存储
进行一些MediaStore
操作,从Android 6.0开始,如果您的targetSdkVersion
为23或更高,则需要使用运行时权限系统。如果您的targetSdkVersion
为22或更低,并且Android 6.0用户手动吊销了您的READ\u EXTERNAL\u STORAGE
权限,我不太确定关于MediaStore
的行为是什么,因为我还没有尝试过该特定场景。是的,您的权利,这是因为Android 6中的权限,你可以回答这个问题,所以如果你愿意,我选择它