我的应用程序将缓存文件写入(和读取)getExternalCacheDir()位置。在Android Lollipop(API 21)之前,我一直成功使用此权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
maxSdkVersion存在是因为在API v18之后不应该需要此权限: http://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE
但在Android Lollipop(5.0)上,我会像这样获得访问权限(并显示我的日志输出以显示实际使用的路径):
11-19 13:01:59.257 4462-4541/com.murrayc.galaxyzoo.app E/android-galaxyzoo﹕ createCacheFile(): IOException for filename=/storage/emulated/0/Android/data/com.murrayc.galaxyzoo.app/cache/52
java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:941)
at com.murrayc.galaxyzoo.app.provider.ItemsContentProvider.createCacheFile(ItemsContentProvider.java:528)
我在模拟器和我的Nexus 4设备上都看到了这个问题。是否有什么变化,还是我一直做错了什么?我只想访问我的应用程序缓存。
更新:现在我只在我的设备上(Nexus 4运行标准的Android 5.1.1,自从我第一次遇到这个问题以来甚至进行了全新的Android刷机)看到这个问题。我不再在模拟器中看到这个问题了-当然,系统映像已经更新了好几次。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
。我在Masmallow上进行了测试,它可以正常工作。您在KitKat和Lollipop中是否仍然遇到此问题? - Cheok Yan Cheng