无法访问 Android 外部存储中的文件

Can't access file in Android External Storage

我将 Xamarin Forms 用于照片捕捉应用程序,并使用 James 的 Media Plugin PCL 使用设备相机捕捉照片。

我意识到,对于每张照片,它都会创建一个文件 /storage/emulated/0/Android/data/com.myapp/files/Pictures

(我可以提供图片文件夹中的子目录和文件名)。我想要做的是在我的应用程序下次启动时删除所有这些文件。

因为我只关注 Android 版本,所以我设置了一个依赖服务调用来本地删除文件(我认为这是微不足道的)但由于某些原因我根本找不到该文件以编程方式或通过 ADB shell。

当我在 windows 电脑上插入设备进行 USB 文件传输时,我可以在 windows 中看到我想要删除的照片 Computer\Moto G (4)\Internal shared storage\Android\data\com.myapp\files\Pictures

但我无法通过代码或 shell 获取这些文件。在代码中,我正在通过

Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath

这给了我路径

/storage/emulated/0/Android/data/com.myapp/files/Pictures

我认为这是我的文件应该所在的路径。但它是空白的。无论我尝试 System.IO 还是 Java.IO,目录都是空的,file.delete()System.IO.File.Delete(path) 对我不起作用。

tldr;

是什么意思
Computer\Moto G (4)\Internal shared storage\Android\data\com.myapp\files\Pictures

转换为 Android OS 中的实际物理路径,我们可以从 ADB Shell?

中列出

What I want to do is delete all these files the next time my app starts up.

尝试使用以下代码,它在我这边运行良好:

public void DeleteFolder()
{
    var path = Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath;

    Java.IO.File directory = new Java.IO.File(path);

    if (directory.IsDirectory)
    {
        foreach (Java.IO.File child in directory.ListFiles())
        {
            deleteRecursive(child);
        }
    }
    directory.Delete();
}

这是一个假阴性。我正在通过 Windows Explorer 查看这些文件,出于某种原因,Windows 即使在它们被删除后仍继续向我显示这些文件。显然,我无法通过 ADB Shell 或从 Android 文件管理器中获取这些文件的原因是因为这些文件根本不存在。

Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).绝对路径

给我

/storage/emulated/0/Android/data/com.myapp/files/Pictures

相同

Computer\MotoG(4)\内部共享storage\Android\data\com.myapp\files\Pictures

System.IO.File.Delete(path) 和 new Java.IO.File(dir, children[i]).Delete();方法工作正常。只是 windows 选择继续显示空的 "ghost" 文件。

这个问题显然已经被提出来没有答案:Programatically deleted files still show up in Windows Explorer