无法访问Android外置存储空间

时间:2018-01-11 00:10:07

标签: android file xamarin.android storage external

我使用Xamarin Forms作为照片捕捉应用程序并使用James' Media Plugin PCL使用设备相机拍摄照片。

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

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

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

当我在Windows计算机上插入设备进行USB文件传输时,我可以看到要删除的照片 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操作系统中的实际物理路径,我们可以从ADB Shell列出?

2 个答案:

答案 0 :(得分:0)

  

我想要做的是在下次启动应用时删除所有这些文件。

尝试使用以下代码,它在我身边正常工作:

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();
}

答案 1 :(得分:0)

这是一个假阴性。我通过Windows资源管理器查看文件,出于某种原因,Windows在删除文件后仍然向我显示这些文件。显然,我无法通过ADB Shell或从Android文件管理器中获取这些文件的原因是因为这些文件从未出现过。

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

给了我

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

相同

Computer \ Moto G(4)\内部共享存储\ Android \ data \ com.myapp \ files \ Pictures

System.IO.File.Delete(path)和新的Java.IO.File(dir,children [i])。Delete();方法很好。只是窗口选择继续显示空的“鬼”文件。

这个问题显然是在没有回答之前提出的:Programatically deleted files still show up in Windows Explorer