Почему мое приложение не может получить доступ к каталогу внешних файлов?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему мое приложение не может получить доступ к каталогу внешних файлов?

Сообщение Anonymous »

Я пытался выяснить, почему приложение, которое я использую, не может загрузить файл (через диспетчер загрузок). С помощью примера кода я сузил его до того, что приложение не может создавать или получать доступ к своей собственной директории внешних файлов на устройстве, на котором я прошил собственное ПЗУ, в то время как то же самое работает нормально на другом устройстве, на котором работает стандартное ПЗУ.
Эта строка кода

Код: Выделить всё

File outfile = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString() + "/" + "Sample" + ".png");
выдает следующий вывод на виновном устройстве:

Код: Выделить всё

Failed to ensure /storage/emulated/0/Android/data/com.gadgetsaint.downloadmanagerexample/files/Download
java.lang.IllegalStateException: Failed to prepare /storage/emulated/0/Android/data/com.gadgetsaint.downloadmanagerexample/files/Download
at android.os.Parcel.createExceptionOrNull(Parcel.java:3363)
at android.os.Parcel.createException(Parcel.java:3339)
at android.os.Parcel.readException(Parcel.java:3322)
at android.os.Parcel.readException(Parcel.java:3264)
at android.os.storage.IStorageManager$Stub$Proxy.mkdirs(IStorageManager.java:1415)
at android.os.storage.StorageManager.mkdirs(StorageManager.java:1421)
at android.app.ContextImpl.ensureExternalDirsExistOrFilter(ContextImpl.java:3767)
at android.app.ContextImpl.getExternalFilesDirs(ContextImpl.java:894)
at android.app.ContextImpl.getExternalFilesDir(ContextImpl.java:883)
at android.content.ContextWrapper.getExternalFilesDir(ContextWrapper.java:308)
at com.gadgetsaint.downloadmanagerexample.MainActivity$2.onClick(MainActivity.java:121)
at android.view.View.performClick(View.java:8228)
at android.view.View.performClickInternal(View.java:8205)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:31785)
at android.os.Handler.handleCallback(Handler.java:1041)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.dispatchMessage(Looper.java:315)
at android.os.Looper.loopOnce(Looper.java:251)
at android.os.Looper.loop(Looper.java:349)
at android.app.ActivityThread.main(ActivityThread.java:9041)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.StorageManagerService.mkdirs(StorageManagerService.java:3867)
at android.os.storage.IStorageManager$Stub.onTransact(IStorageManager.java:690)
at android.os.Binder.execTransactInternal(Binder.java:1441)
at android.os.Binder.execTransact(Binder.java:1385)
Странно то, что с помощью проводника устройств Android Studio я обнаружил, что другие приложения имеют каталоги внешних файлов (или кеша). Почему мой пример приложения (или приложения, которое я изначально отлаживал) не может получить доступ к внешнему хранилищу на этом устройстве, а не на другом? Оба устройства работают под управлением Android 16.
РЕДАКТИРОВАТЬ: если я попытаюсь создать внешний каталог загрузки вручную, я получу

Код: Выделить всё

java.nio.file.AccessDeniedException
РЕДАКТИРОВАТЬ: Когда я создаю второго пользователя и переключаюсь на него, я без проблем могу получить доступ к внешним файлам. Возможно, я удалю каждое из своих приложений по отдельности и посмотрю, не препятствует ли одно из них доступу.
РЕДАКТИРОВАТЬ: Я заметил, что могу просматривать /storage/emulated/0/Android/data с помощью файлового браузера на проблемном устройстве, а на другом - нет.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -files-dir
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»