Разрешение отклонено при записи в context.getFilesDir()

Когда пользователь впервые открывает мое приложение, я записываю немного данных в локальный файл.

Я понимаю, что моему приложению требуется разрешение на запись в этот файл, поэтому я использую getFilesDir() следующим образом:

File ins = new File(context.getFilesDir(), "INSTALLATION");
// do some things
FileOutputStream out = FileOutputstream.new(ins);
out.write(data.toString().getBytes());
out.close();

Это работает в 99,9% случаев. Но я вижу небольшую струйку исключений, говорящих, что у меня нет разрешения на создание этого файла. Например:

java.lang.RuntimeException: Unable to create application com.blah.blah.Blah
java.lang.RuntimeException: java.io.FileNotFoundException: /INSTALLATION (Permission denied)

Почему это происходит? Могу ли я обойти это? Немедленный сбой — это такой неприятный первый опыт работы с приложением.


person abscondment    schedule 14.02.2012    source источник
comment
Вы решили? Если да, пожалуйста, примите это как ответ   -  person Tofeeq Ahmad    schedule 14.02.2012
comment
Вот мой ответ на аналогичную проблему: stackoverflow.com/questions/7353871/   -  person blyabtroi    schedule 09.03.2013
comment
Вы поняли, в чем дело? У меня такая же проблема. Я использую официальный код Android для отслеживания установки android-developers.blogspot .ro/2011/03/   -  person Catalin Morosan    schedule 23.07.2013
comment
Вы когда-нибудь находили решение? У меня такая же проблема, и в документации указано, что для этой папки не требуются дополнительные разрешения. developer.android.com/reference/android/content/   -  person or_dvir    schedule 09.04.2021


Ответы (1)


Дайте разрешение в манифесте Android

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

убедитесь, что вы указали правильный путь к файлу с расширением, поскольку вы получаете

java.io.FileNotFoundException
person Tofeeq Ahmad    schedule 14.02.2012
comment
Нет, этого не может быть. Вы можете писать в хранилище своего приложения, не запрашивая у пользователя доступ к внешнему хранилищу. Как я уже сказал, в 99,9% случаев запись выполняется успешно; путь и имя всегда одинаковы, поэтому это не проблема с разрешениями или неправильный путь. - person abscondment; 09.03.2012
comment
без разрешения! Это удивительно и противоречит DOC. Мы можем писать только в активы, обмениваться префиксами без разрешения, а не в SD-карту. - person Tofeeq Ahmad; 12.03.2012
comment
Я не пытаюсь писать на SDCard. Это совсем другой вопрос. Я пишу в частный каталог приложения, например: developer.android.com/reference/android/content/ - person abscondment; 24.03.2012
comment
Это может быть старым, но приведенный выше ответ может быть правильным, если пользователи перемещают ваше приложение на SD-карту с помощью функции списка приложений Android. Просто мысль. - person Roloc; 10.10.2012
comment
У меня та же проблема, и я запрашиваю разрешение: WRITE_EXTERNAL_STORAGE, и все же результат: PERMISSION DENIED. Пожалуйста, ответьте на него, если вы нашли решение. - person f.trajkovski; 29.07.2018