我已经打开了文件夹中的文件列表,如下所示,但我不能在Android Q(Android 10)或更高版本中使用下面的方法。
如何使用MediaStore加载音乐文件夹中的文件列表?
public void getFileListInFolder() {
String path = Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC);
File directory = null;
try {
directory = new File(path);
Log.i("debug","dir = " + directory);
}
catch (Exception e)
{
Log.i("debug","Uri e = " + e);
}
File[] files = directory.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isFile();
}
});
if(files != null)
{
for (int i = 0; i < files.length; i++) {
Log.i("debug", "FileName:" + files[i].getName());
}
}
}
发布于 2021-05-11 03:13:57
从Android q开始就不再推荐使用getExternalStoragePublicDirectory
为了提高用户隐私,不推荐直接访问共享/外部存储设备。当应用程序以{@link android.os.Build.VERSION_CODES#Q}为目标时,应用程序将无法再直接访问此方法返回的路径。通过迁移到{@link Context#getExternalFilesDir(字符串)}、{@link MediaStore}或{@link Intent#ACTION_OPEN_DOCUMENT}等替代选项,应用程序可以继续访问共享/外部存储上存储的内容。
这意味着不能直接读写/storage/emulated/0/Music的文件,但可以读/写/storage/emulated/0/Android/data/com.youapp/files/Music下的文件
public void getFileListInFolder() {
String path = getExternalFilesDir(DIRECTORY_MUSIC).getAbsolutePath();
Log.d(TAG, "getFileListInFolder:path " + path);
File directory = null;
try {
directory = new File(path);
Log.i(TAG,"dir = " + directory);
}
catch (Exception e)
{
Log.i(TAG,"Uri e = " + e);
}
File[] files = directory.listFiles();
Log.i(TAG, "getFileListInFolder:files " + files);
for (File f:
files) {
Log.d(TAG, "getFileListInFolder: " + f.getName());
}
if(files != null)
{
for (int i = 0; i < files.length; i++) {
Log.i(TAG, "FileName:" + files[i].getName());
}
}
}
https://stackoverflow.com/questions/67479014
复制