2010-12-22 60 views
17

Estoy tratando de escribir un archivo a la tarjeta SD con el siguiente código (permiso android.permission.WRITE_EXTERNAL_STORAGE ya establecido en manifest.xml). Sobre la ejecución de nmea_file.createNewFile(); arroja la excepción con Permission Denied.Escritura de la tarjeta SD de Android, Permiso denegado

¿Alguna idea de por qué estaría sucediendo esto?

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); 
      } 
     } 
    } 
    } 
+2

publique su logcat – Falmarri

+0

¿Está utilizando sharedUerId en el sistema? –

Respuesta

20

Puede suceder si la tarjeta SD está bloqueado para algunas operaciones, tales como:

  1. Preparación para desmontar la tarjeta SD de la ranura
  2. El dispositivo conectado al PC como unidad USB externa
+2

Tontamente olvidé que mi tarjeta SD también estaba montada, ¡gracias por la sugerencia! – Dr1Ku

+0

El dispositivo conectado como almacenamiento USB también fue mi problema, ¡gracias! – Ixx

12

Es posible que desee comprobar que tiene acceso a SDCARD. He aquí cómo usted puede hacerlo en código: (!)

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

buena sugerencia hombre .. –

32

Agregar a Manifest.xml

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

Espero que lea la pregunta con claridad, dijo que ya tenía este permiso en manifiesto. – nnhthuan

2

Sé consciente de que su estado de usos-SDK se puede efectuar usted capacidad de escribir en la tarjeta SD .

Mi AndroidManifest.xml tuvo la siguiente:

<uses-sdk minSdkVersion="8"/> 

Y podría escribir en la tarjeta SD sin ningún problema a pesar de que no había declarado android.permission.WRITE_EXTERNAL_STORAGE.

Cuando cambié mi estado de usos-SDK para:

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

Todos mis escrituras de tarjetas SD falló con un permiso denegado! Concedido que android.permission.WRITE_EXTERNAL_STORAGE debería haber sido declarado, pero ¿por qué con una instrucción uses-sdk funcionó y la otra no?

0

Compruebe si sdcard es montado o no, si está registrando el emulador. Además, no olvide dar tamaño a la tarjeta SD en el momento de crear el emulador. Luego debe agregar <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
en su manifiesto.

+0

Referencia de API para verificar el estado de los soportes aquí: http://developer.android.com/reference/android/os/Environment.html – uprego

Cuestiones relacionadas