如何获取 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 29及以上高版本获取SD外部存储器目录

Android 29及以上高版本获取SD外部存储器目录

Android Q及以上系统音频捕获功能(声音内录)的简单实现

如何在Android studio导入jdk9及以上版本中依赖包,如'rt.jar',' dt.jar'等

什么是Android4.0或IOS8.0及以上版本智能手机?

如何检查我是否在Android 4.4及以上版本中以编程方式打开gps? [重复]