xamarin 为什么像x-plore这样的应用程序可以列出所有目录,而System.IO.Directory.GetDirectories在Android上拒绝访问?

qv7cva1a  于 2023-08-01  发布在  Android
关注(0)|答案(2)|浏览(86)

好奇心杀死了我。在用Xamarin和C#制作的Android测试应用程序中,我想列出路径“/storage/emulated/0/Android”中的所有文件和目录。我已经给了权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

字符串
但我还是被拒绝了。与此同时,像X-plore这样的应用程序可以毫无问题地做到这一点,即使它们具有相同的读写权限。
这里是代码。

private void ListDaFiles(string rootDirectory)
{
    var paths = new List<string>();
    List<string> fileList = new List<string>();

    RecursivelyListFilesAndDirectories(rootDirectory, fileList);

    foreach (string path in fileList)
    {
        paths.Add(path);
    }

}

private void RecursivelyListFilesAndDirectories(string directoryPath, List<string> fileList)
{
    try
    {
        string[] files = System.IO.Directory.GetFiles(directoryPath);
        string[] directories = System.IO.Directory.GetDirectories(directoryPath);

        fileList.AddRange(files);

        foreach (string dir in directories)
        {
            fileList.Add(dir);
            RecursivelyListFilesAndDirectories(dir, fileList);
        }
    }
    catch (Exception ex)
    {
        string err = ex.Message;
    }
}

noj0wjuj

noj0wjuj1#

我找到了解决办法!在AndroidManifest.xml文件中,我添加了以下内容:android:requestLegacyExternalStorage=“true”inside虽然我之前已经做过了,但这次我做的不同之处在于删除权限并卸载应用程序。然后,我从头开始重新运行一切。它创造了奇迹!

j8ag8udp

j8ag8udp2#

。尽管他们有相同的读写权限
他们可能还要求用户访问所有文件。
有关在较新的Android版本上访问文件的其他信息,请参阅community wiki answer about Android file access

相关问题