【问题标题】:How do I get the list of files in the MUSIC folder on Android Q and above?如何获取 Android Q 及以上版本的 MUSIC 文件夹中的文件列表?
【发布时间】: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());
        }
    }
}

【问题讨论】:

    标签: android android-10.0 mediastore android-music-player


    【解决方案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());
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2011-01-15
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多