如何使用 MediaStore 获取文件夹中的项目数 Android
How to get Count of Items in a Folder using MediaStore Android
我有一个包含图像的目录。我想知道如何使用 MediaStore 从该文件夹中获取图像数量。我尝试使用 COUNT 关键字,但 AndroidQ 不支持它。也请告知是否有其他有效的方法。
请尝试这种方式
private static int getCount(@NonNull final Context context, @NonNull final Uri contentUri, @NonNull final String bucketId)
{
try (final Cursor cursor = context.getContentResolver().query(contentUri,
null, MediaStore.Video.Media.BUCKET_ID + "=?", new String[]{bucketId}, null))
{
return ((cursor == null) || (cursor.moveToFirst() == false)) ? 0 : cursor.getCount();
}
}
final HashMap<String, AlbumQuery.Album> output = new HashMap<>();
final Uri contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
final String[] projection = {MediaStore.Video.VideoColumns.BUCKET_ID,MediaStore.Video.VideoColumns.BUCKET_DISPLAY_NAME,MediaStore.Video.VideoColumns.DATA};
try (final Cursor cursor = context.getContentResolver().query(contentUri, projection, null, null, null))
{
if ((cursor != null) && (cursor.moveToFirst() == true))
{
final int columnBucketName = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.BUCKET_DISPLAY_NAME);
final int columnBucketId = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.BUCKET_ID);
do
{
final String bucketId = cursor.getString(columnBucketId);
final String bucketName = cursor.getString(columnBucketName);
if (output.containsKey(bucketName) == false)
{
final int count = AlbumQuery.getCount(context, contentUri, bucketId);
//output.put(bucketName, album);
}
} while (cursor.moveToNext());
}
}
**Another way**
fun count(dir: File) {
try {
if (dir.isDirectory) {
if(!dir.name.equals(AppConstants.MASK_DIR_LOCAL) && !dir.name.equals(DIR1) && !dir.name.equals(DIR2) ){
val children = dir.list()
for (i in children.indices) {
//File(dir, children[i])
count++;
}
}
}
}catch (e:java.lang.Exception){
e.printStackTrace()
}
}
我有一个包含图像的目录。我想知道如何使用 MediaStore 从该文件夹中获取图像数量。我尝试使用 COUNT 关键字,但 AndroidQ 不支持它。也请告知是否有其他有效的方法。
请尝试这种方式
private static int getCount(@NonNull final Context context, @NonNull final Uri contentUri, @NonNull final String bucketId)
{
try (final Cursor cursor = context.getContentResolver().query(contentUri,
null, MediaStore.Video.Media.BUCKET_ID + "=?", new String[]{bucketId}, null))
{
return ((cursor == null) || (cursor.moveToFirst() == false)) ? 0 : cursor.getCount();
}
}
final HashMap<String, AlbumQuery.Album> output = new HashMap<>();
final Uri contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
final String[] projection = {MediaStore.Video.VideoColumns.BUCKET_ID,MediaStore.Video.VideoColumns.BUCKET_DISPLAY_NAME,MediaStore.Video.VideoColumns.DATA};
try (final Cursor cursor = context.getContentResolver().query(contentUri, projection, null, null, null))
{
if ((cursor != null) && (cursor.moveToFirst() == true))
{
final int columnBucketName = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.BUCKET_DISPLAY_NAME);
final int columnBucketId = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.BUCKET_ID);
do
{
final String bucketId = cursor.getString(columnBucketId);
final String bucketName = cursor.getString(columnBucketName);
if (output.containsKey(bucketName) == false)
{
final int count = AlbumQuery.getCount(context, contentUri, bucketId);
//output.put(bucketName, album);
}
} while (cursor.moveToNext());
}
}
**Another way**
fun count(dir: File) {
try {
if (dir.isDirectory) {
if(!dir.name.equals(AppConstants.MASK_DIR_LOCAL) && !dir.name.equals(DIR1) && !dir.name.equals(DIR2) ){
val children = dir.list()
for (i in children.indices) {
//File(dir, children[i])
count++;
}
}
}
}catch (e:java.lang.Exception){
e.printStackTrace()
}
}