J'essaie d'écrire un fichier sur la SDCard avec le code ci-dessous (permission Android.permission.WRITE_EXTERNAL_STORAGE
déjà définie dans manifest.xml) . Lors de l'exécution de nmea_file.createNewFile();
, une exception avec Permission Denied
est levée.
Des suppositions pourquoi cela se produirait-il?
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);
}
}
}
}
Ajouter à manifest.xml
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
Cela peut arriver si la carte SD est bloquée pour certaines opérations, telles que:
Vous voudrez peut-être vérifier que vous avez accès à la carte SDCARD. Voici comment vous pouvez le faire dans le code:
if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
Toast.makeText(this, "External SD card not mounted", Toast.LENGTH_LONG).show();
}
Sachez que votre déclaration uses-sdk peut affecter votre capacité à écrire sur la carte SD (!).
Mon AndroidManifest.xml avait les caractéristiques suivantes:
<uses-sdk minSdkVersion="8"/>
Et je pouvais écrire sur la carte SD sans problème même si je n'avais pas déclaré Android.permission.WRITE_EXTERNAL_STORAGE.
Lorsque j'ai modifié ma déclaration uses-sdk en:
<uses-sdk Android:targetSdkVersion="9" minSdkVersion="8" />
Toutes les écritures sur ma carte SD ont échoué avec une autorisation refusée! Certes, Android.permission.WRITE_EXTERNAL_STORAGE aurait dû être déclaré, mais pourquoi avec une instruction uses-sdk cela a fonctionné et l'autre non?
Vérifiez si sdcard est monté ou pas si vous archivez émulateur. Il ne faut pas non plus oublier de donner une certaine taille à la carte mémoire au moment de la création de l’émulateur. Ensuite, vous devez ajouter <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
dans votre manifeste.