Запись SD-карты на Android, разрешение отклонено

Я пытаюсь записать файл на SDCard с кодом ниже (разрешение android.permission.WRITE_EXTERNAL_STORAGE уже установлено в manifest.xml). После выполнения nmea_file.createNewFile(); Он выдает исключение с Permission Denied .

Любые догадки, почему это произойдет?

 if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { Log.d(TAG, "Sdcard was not mounted !!" ); } else { File nmea_file; File root = Environment.getExternalStorageDirectory(); FileWriter nmea_writer = null; try { nmea_file = new File(root,"NMEA.txt"); if(!nmea_file.exists()) { Log.w(TAG, "File Doesn't Exists!"); nmea_file.createNewFile(); } nmea_writer = new FileWriter(nmea_file); nmea_writer.append(nmea); nmea_writer.flush(); } catch (IOException e) { Log.w(TAG, "Unable to write", e); } finally { if (nmea_writer != null) { try { nmea_writer.close(); } catch (IOException e) { Log.w(TAG, "Exception closing file", e); } } } } 

Solutions Collecting From Web of "Запись SD-карты на Android, разрешение отклонено"

Добавить в manifest.xml

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

Это может произойти, если SD-карта заблокирована для некоторых операций, например:

  1. Подготовка к снятию SD-карты из слота
  2. Устройство, подключенное к ПК в качестве внешнего USB-накопителя

Возможно, вы захотите проверить, что у вас есть доступ к SDCARD. Вот как вы можете это сделать в коде:

 if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ Toast.makeText(this, "External SD card not mounted", Toast.LENGTH_LONG).show(); } 

Имейте в виду, что ваш оператор uses-sdk может помочь вам записать на SD-карту (!).

Мой AndroidManifest.xml имел следующее:

 <uses-sdk minSdkVersion="8"/> 

И я мог писать на SD-карту без каких-либо проблем, хотя я не объявлял android.permission.WRITE_EXTERNAL_STORAGE.

Когда я изменил инструкцию use-sdk на:

 <uses-sdk android:targetSdkVersion="9" minSdkVersion="8" /> 

Все мои записи на SD-картах не удались с разрешением! Предоставлено, что андроид.permission.WRITE_EXTERNAL_STORAGE должен был быть объявлен, но почему с одним использованием -sdk-оператора он работал, а другой – нет?

Проверьте, установлена ли SD-карта или нет, если вы проверяете эмулятор. Кроме того, dont foget дает некоторый размер для SD-карты во время создания эмулятора. Затем вам нужно добавить
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
В вашем манифесте.