在../Android/data中创建包目录在Android上的SD卡上拒绝4.4

问题描述:

我无法在“/ storage/extSdCard/Android/data”中创建我的应用程序的“com.foo.Example”文件夹在应用程序内。如果使用文件管理器手动创建,则不会出现问题,只需使用简单的mkdir创建第一个就会返回false。 我使用了声明中声明的包名,并且始终使用它,并且在那里也有相应的WRITE_EXTERNAL_STORAGE权限。 如果应用程序无法创建它,此文件夹从何而来?在../Android/data中创建包目录在Android上的SD卡上拒绝4.4

+0

由于atomicrat意味着你不应该假设存储卷的路径是什么 - 而是使用适当的API在运行时确定它。 – 2014-10-29 16:31:58

我假设你使用getExternalFilesDir(),如果没有,你会想要转换为它。 getExternalFilesDir(),当传递null时,将为您的应用程序创建一个专用目录,如果它尚不存在并返回该句柄。

您需要查看this guide,其中包含有关如何写入外部存储的所有信息。

至于你为什么在KitKat上遇到这个问题,Google更改了外部存储的权限模型,以防止应用程序写入SD卡上的任意文件夹,这提供了更好的安全性,并且使组织更好。然而,很酷的部分是,getExternalFilesDir()甚至不需要使用权限!它始终可用于您的应用程序。

希望有帮助!

+0

我发现我的错误,我错误地认为文件夹“../com.foo.Example”是我可以写入的文件夹,并没有意识到它是“../com.foo.Example/files”。所以getExternalFilesDir()返回确实正确的路径,为此欢呼。 – Templerschaf 2014-10-31 12:29:12