Ответ 1
Добавить в manifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Я пытаюсь записать файл на 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);
}
}
}
}
Добавить в manifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Возможно, если SD-карта заблокирована для некоторых операций, например:
Возможно, вы захотите проверить, что у вас есть доступ к 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-картах не удались с разрешением! Предоставлено, что файл android.permission.WRITE_EXTERNAL_STORAGE должен был быть объявлен, но почему с одним использованием -sdk-оператора он работал, а другой - нет?
Проверьте, установлена ли sdcard или нет, если вы проверяете эмулятор. Кроме того, dont foget дает некоторый размер для SD-карты во время создания эмулятора. Затем вам нужно добавить <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
в вашем манифесте.