如何获取 Android Q 及以上版本的 MUSIC 文件夹中的文件列表?
Posted
技术标签:
【中文标题】如何获取 Android Q 及以上版本的 MUSIC 文件夹中的文件列表?【英文标题】:How do I get the list of files in the MUSIC folder on Android Q and above? 【发布时间】:2021-08-01 08:42:59 【问题描述】:我一直在如下所示的文件夹中调出文件列表,但我无法在 android Q(Android 10) 或更高版本中使用以下方法。
如何使用 MediaStore 加载 MUSIC 文件夹中的文件列表?
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());
【问题讨论】:
【参考方案1】:getExternalStoragePublicDirectory 自 Android Q 起已弃用
为了提高用户隐私,直接访问共享/外部 存储设备已弃用。当应用程序针对 @link android.os.Build.VERSION_CODES#Q,返回的路径 从此方法不再可供应用直接访问。 应用程序可以继续访问存储在共享/外部的内容 通过迁移到替代方案来存储,例如 @link Context#getExternalFilesDir(String), @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());
【讨论】:
以上是关于如何获取 Android Q 及以上版本的 MUSIC 文件夹中的文件列表?的主要内容,如果未能解决你的问题,请参考以下文章
Android Q及以上系统音频捕获功能(声音内录)的简单实现
如何在Android studio导入jdk9及以上版本中依赖包,如'rt.jar',' dt.jar'等