Verificando acceso a la memoria externa

La memoria externa puede haber sido extraída o estar protegida contra escritura.

Puedes utilizar el método Environment.getExternalStorageState() para verificar el estado de la memoria. Veamos como se utiliza:

String stadoSD = Environment.getExternalStorageState();

if (stadoSD.equals(Environment.MEDIA_MOUNTED)) {
    // Podemos leer y escribir
    ...
} else if (stadoSD.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
    // Podemos leer
    ...
} else {
    // No podemos leer y ni escribir

    ...
}

Práctica: Verificando acceso a la memoria externa

1.     Modifica la clase AlmacenPuntuacionesFicheroExterno para que antes de acceder a la memoria externa verifique que la operación es posible. En caso contrario mostrará un Toast y saldrá del método.

2.     Ejecuta el programa en un dispositivo real con memoria externa y verifica que se almacena correctamente.

3.     Ahora verifica el comportamiento cuando la memoria externa no está disponible. Para que el dispositivo ya no tenga acceso a esta memoria, la solución más sencilla consiste en conectar el dispositivo con el cable USB y activar el almacenamiento por USB.

Solución: Verificando acceso a la memoria externa

1.     En guardarPuntuacion() añade:

String stadoSD = Environment.getExternalStorageState();
if (!stadoSD.equals(Environment.MEDIA_MOUNTED)) {
   Toast.makeText(context, "No puedo escribir en la memoria externa",
                                              Toast.LENGTH_LONG).show();
   return;
}

2.     En listaPuntuacion() añade:

String stadoSD = Environment.getExternalStorageState();
if (!stadoSD.equals(Environment.MEDIA_MOUNTED) &&
               !stadoSD.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
   Toast.makeText(context, "No puedo leer en la memoria externa",
                                          Toast.LENGTH_LONG).show();
   return result;
}