如何访问AndroidQ中的所有图片?
How to acess all the picture in Android Q?
想做一个相册之类的lib适配成AndroidQ
由于分区存储,MediaStore.Images.ImageColumns.DATA
已弃用;
我们不能通过/storage/emulated/0/DCIM/xxx.png
这样的路径直接读取文件
MediaStore.Images.ImageColumns
没有像URI那样的值,所以无法通过ContentProvider获取图片
这样我们只能打开一张图片(下代码),在回调中收到一个URI;
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
// Filter to only show results that can be "opened", such as a
// file (as opposed to a list of contacts or timezones).
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Filter to show only text files.
intent.setType("image/*");
但是我想访问所有的图片,那么,如何扫描AndroidQ中的所有图片?
这就是我一直在不需要 MediaStore.MediaColumns.DATA
常量
的情况下检索所有图像的方式
val externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val cursor = context.contentResolver
.query(
externalUri,
arrayOf(MediaStore.MediaColumns._ID, MediaStore.MediaColumns.DATE_MODIFIED),
null,
null,
"${MediaStore.MediaColumns.DATE_MODIFIED} DESC"
)
if(cursor != null){
while(cursor.moveToNext()){
val id = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns._ID))
val uri = ContentUris.withAppendedId(externalUri, id.toLong())
//do whatever you need with the uri
}
}
cursor?.close()
它是用 Kotlin 编写的,但如果不难转换为 java
想做一个相册之类的lib适配成AndroidQ
由于分区存储,MediaStore.Images.ImageColumns.DATA
已弃用;
我们不能通过/storage/emulated/0/DCIM/xxx.png
MediaStore.Images.ImageColumns
没有像URI那样的值,所以无法通过ContentProvider获取图片
这样我们只能打开一张图片(下代码),在回调中收到一个URI;
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
// Filter to only show results that can be "opened", such as a
// file (as opposed to a list of contacts or timezones).
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Filter to show only text files.
intent.setType("image/*");
但是我想访问所有的图片,那么,如何扫描AndroidQ中的所有图片?
这就是我一直在不需要 MediaStore.MediaColumns.DATA
常量
val externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val cursor = context.contentResolver
.query(
externalUri,
arrayOf(MediaStore.MediaColumns._ID, MediaStore.MediaColumns.DATE_MODIFIED),
null,
null,
"${MediaStore.MediaColumns.DATE_MODIFIED} DESC"
)
if(cursor != null){
while(cursor.moveToNext()){
val id = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns._ID))
val uri = ContentUris.withAppendedId(externalUri, id.toLong())
//do whatever you need with the uri
}
}
cursor?.close()
它是用 Kotlin 编写的,但如果不难转换为 java