Android Exception: java.io.IOException: open failed: EACCES (Permission denied)
По какой-то странной причине я постоянно сталкиваюсь с проблемой с различными типами устройств Android для сохранения захваченных изображений на устройстве.
Вот подробный журнал ошибок, о том, что на самом деле получаю.
java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:940)
at com.parkhya.pick_for_shareAflash.HomeActivity.resizeImage(HomeActivity.java:456)
at com.parkhya.pick_for_shareAflash.HomeActivity.onActivityResult(HomeActivity.java:393)
Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:933)
Несмотря на то, что все другие приложения для Android, такие как Instagram и другие, могут сохранять снимки, нажатые на камеру, на устройствах.
Кто-нибудь, можете ли вы предложить, что мне делать, чтобы мое приложение сохраняло снимки камеры в SD-карте.
Ответы
Ответ 1
добавьте разрешение для того, чтобы приложение могло писать на внешнее хранилище.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Позволяет программе читать данные из внешнего хранилища.
Любое приложение, объявляющее разрешение WRITE_EXTERNAL_STORAGE, неявно получает это разрешение.
Это разрешение введено в действие, начиная с уровня API 19. До уровня API 19 это разрешение не применяется, и все приложения все еще имеют доступ к чтению из внешнего хранилища. Вы можете протестировать свое приложение с помощью разрешения, разрешенного включением Protect USB storage в разделе "Параметры разработчика" в приложении "Настройки" на устройстве под управлением Android 4.1 или выше.
Ответ 2
Это может вам помочь. Я сталкиваюсь с той же проблемой при записи файла на SD-карте. Я установил все необходимые разрешения для записи файла, но я использовал объект файла, как показано ниже:
Неправильно:
File myFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile()+fileName);
Правильно:
File myFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(), fileName);
Это означает, что путь был неправильным.
Ответ 3
Решение, которое я нахожу,
изменить эмулятор
1. перейдите в диспетчер виртуальных устройств Android, а затем отредактируйте эмулятор
2. установите 100 МБ для Sd-карты для уважаемого эмулятора и скажите "ОК"
3. сохранить и закрыть эмулятор и запустить
4. Сохраненный путь: нажмите DDMS mnt/sdcard/yourfilename
это работало для меня, приложение не дает Ошибка и работает
Ответ 4
Обратите внимание на следующую ловушку: кто-то написал
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
в AndroidManifest.xml.
Я хотел сохранить файлы и добавил указанную строку и получил
<uses-permission android:name="android.permission.INTERNET" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</uses-permission>
что является плохим синтаксисом. Это должно быть
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
или
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />