Moja aplikacja zapisuje (i czyta) pliki pamięci podręcznej do lokalizacji getExternalCacheDir(). Przed Android Lollipop (API 21) Używam tego uprawnienia z sukcesu:Dlaczego potrzebuję uprawnienia WRITE_EXTERNAL_STORAGE z getExternalCacheDir() na Android Lollipop?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
maxSdkVersion jest tam, ponieważ to uprawnienie nie powinno być potrzebne po API V18: http://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE
Ale na Androida Lollipop (5.0) Otrzymuję uprawnienia dostępu (tak jak z moim wyjściu dziennika, aby pokazać rzeczywistą ścieżkę używaną):
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)
widzę to zarówno w emulatorze i na moim Nexus 4. czy coś się zmieniło, czy czy robiłem coś wron g cały czas? Chcę tylko uzyskać dostęp do pamięci podręcznej mojej aplikacji.
Aktualizacja: Teraz widzę to tylko w moim urządzeniu (Nexus 4 z systemem Android 5.1.1 standardowego, który miał nawet świeże Android wgra odkąd pierwszy miał ten problem). Nie widzę już tego w emulatorze - oczywiście obrazy systemu zostały zaktualizowane kilka razy.
Jeśli nie dodać ten android: maxSdkVersion = „18” Właściwości to działa? –
Tak. Muszę zawsze prosić WRITE_EXTERNAL_STORAGE, aby to działało. Zastanawiam się, czy istnieje sposób, aby powiedzieć, że jest to potrzebne dla <18 but > 20, jeśli jest to naprawdę potrzebne dla 21 (Lollipop). – murrayc
Tak jak w dokumentacji Począwszy od poziomu interfejsu API 19, to uprawnienie nie jest wymagane do odczytu/zapisu plików w katalogach aplikacji zwróconych przez getExternalFilesDir (String) i getExternalCacheDir(), więc nie wymagamy tego uprawnienia 19 lub wyższego API, ale wniosek jest nie działa bez tego pozwolenia. –