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;
}