![](/img/trans.png)
[英]How do I list all file in a directory in android 10 using Android Studio?
[英]How can I list all the files in directory using Medistore (Android 10/Q)?
我想通过 Mediastore API 查询名为memories
的文件夹中的所有文件。 我已经尝试查看这些问题,但没有得到适当的答案。
编辑:绝对路径: imageUri: content://media/external/images/media/31
编辑:我如何保存图像:
private void saveImage(Bitmap bitmap, @NonNull String name) throws IOException {
boolean saved;
OutputStream fos;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentResolver resolver = getContext().getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/" + IMAGES_FOLDER_NAME);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
Log.d(TAG, "imageUri: " + imageUri);
fos = resolver.openOutputStream(imageUri);
} else {
String imagesDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM).toString() + File.separator + IMAGES_FOLDER_NAME;
File file = new File(imagesDir);
if (!file.exists()) {
file.mkdir();
}
File image = new File(imagesDir, name + ".png");
Log.d(TAG, "File file: " + image);
fos = new FileOutputStream(image);
}
saved = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
Log.d(TAG, "Bitmap Image AndroidQ: " + saved);
fos.flush();
fos.close();
}
编辑:我用标签Mediastore
查找了许多问题并形成了这个解决方案,但我无法编写 SQLite 占位符语法,所以任何人都可以帮助我。 @blackapps
String selection = MediaStore.MediaColumns.RELATIVE_PATH + "/DCIM/" + IMAGES_FOLDER_NAME;
String[] selectionArgs = new String[] {"%memories%"};
try (Cursor cursor = requireContext().getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
selectionArgs,
null
)) {
assert cursor != null;
int nameColumn =
cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
Log.d(TAG, "name column: " + nameColumn);
while (cursor.moveToNext()) {
String name = cursor.getString(nameColumn);
byte[] bytes = name.getBytes();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Log.d(TAG, "file name: " + name);
imageList.add(bitmap);
}
}
你可以这样做
fun getFiles(var directory_name){
var selection: String
selection = MediaStore.Files.FileColumns.RELATIVE_PATH+ " =? "
var selectionArgs = arrayOf(directory_name)
val cursor: Cursor? = contentResolver.query(
MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY),
null,
selection,
selectionArgs,
null
)
}
您需要使用 do while 循环或任何其他方法迭代 cursor
function call: getFiles(Lyrics/) //如果你想使用 sd 卡,请使用 MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL)。 我已经对此进行了测试,并且对我来说工作正常
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.