Meine App schreibt (und liest) Cache-Dateien in den Speicherort getExternalCacheDir(). Bevor Android Lollipop (API 21) Ich habe mit dieser Berechtigung mit Erfolg:Warum benötige ich die Berechtigung WRITE_EXTERNAL_STORAGE mit getExternalCacheDir() auf Android Lollipop?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
Die maxSdkVersion ist da, weil diese Berechtigung nicht nach API v18 benötigt werden soll: http://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE
Aber auf Android Lollipop (5,0) ich erhalte eine Zugriffsberechtigung wie so (mit meinem Logausgabe den tatsächlichen Pfad zu zeigen, verwendet wird):
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)
ich das sehen sowohl im Emulator und auf meinem Nexus 4. Hat sich etwas verändert, oder War ich etwas wron g die ganze Zeit? Ich möchte nur auf den Cache meiner eigenen App zugreifen.
Update: Ich sehe das jetzt nur auf meinem Gerät (Nexus 4 mit dem Standard Android 5.1.1, die sogar eine frische Android Reflash hatte, seit ich dieses Problem hatte). Ich sehe das nicht mehr im Emulator - natürlich wurden die Systembilder mehrmals aktualisiert.
Wenn Sie das android nicht hinzufügen: maxSdkVersion = „18“ Eigenschaften es dann funktionieren? –
Ja. Ich muss immer WRITE_EXTERNAL_STORAGE anfordern, damit dies funktioniert. Ich frage mich, ob es eine Möglichkeit gibt zu sagen, dass es für <18 but > 20 benötigt wird, wenn es wirklich für 21 (Lollipop) benötigt wird. – murrayc
Ja gemäß Dokumentation Ab API-Stufe 19 ist diese Berechtigung nicht erforderlich, um Dateien in Ihren anwendungsspezifischen Verzeichnissen zu lesen/schreiben, die von getExternalFilesDir (String) und getExternalCacheDir() zurückgegeben werden nicht ohne diese Erlaubnis arbeiten. –