Seleccionar directorios en la interna o externa. Android Studio
Publicado por Sergio (1 intervención) el 17/12/2016 15:28:28
Hola. Tengo un layout para elegir rutas en la interna y externa y que me la muestre en un EditText, (abre la opción de explorador de archivos para que el usuario elija el suyo y pueda navegar) cosa que consigo siempre y cuando el usuario seleccione un archivo dentro de ese directorio, al seleccionar el archivo, el programa le devuelve al layout para continuar y me pone la ruta en el EditText.
Esto no es exactamente lo que busco: quiero que al seleccionar el directorio, le devuelva al layout para continuar con la aplicación.
Este es el código para eso: (MainActivity).
Y un poco más abajo:
Lo segundo: por más que miro webs e intento dar con ello, no consigo crear una carpeta ó directorio en la microSD. Ya puse los permisos correspondientes en AndroidManifest.xml
Código:
E incluso compruebo el estado de la microSD. Código:
Hasta ahora, lo único que he conseguido es que la carpeta se cree en la memoria interna. Incluso aún indicándole expresamente la ruta de la externa, no lo crea en la externa (microSD).
Código:
Me crea la carpeta map en /map de la interna (lógico), pero aún colocando /storage/.../ (que es de la externa).
Esto lo he puesto tanto en los dos sitios donde aparece ../map ó ...("/sstorage/map).
Dos dudas: si alguien pudiera responderme.
Gracias de antemano.
Saludos.
Esto no es exactamente lo que busco: quiero que al seleccionar el directorio, le devuelva al layout para continuar con la aplicación.
Este es el código para eso: (MainActivity).
1
2
3
4
5
6
et2 = (EditText) findViewById(R.id.editTextrutaOrigen);
int SELECCIONAR_DIRECTORIO_ORIGEN = 1;
Intent intentOrigen = new Intent(Intent.ACTION_GET_CONTENT);
intentOrigen.setType("*/storage");
startActivityForResult(intentOrigen, SELECCIONAR_DIRECTORIO_ORIGEN);
estadoBooleanOrigen = true;
Y un poco más abajo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (estadoBooleanOrigen) {
estadoBooleanOrigen = false;
String rutaOrigen = data.getData().getPath();
et2.setText(rutaOrigen); // este ya me pone la ruta en el EditText, con nombre de archivo y extensión incluidos
}
if (estadoBooleanDestino) {
estadoBooleanDestino = false;
String rutaDestino = data.getData().getPath();
et3.setText(rutaDestino);
}
}
}
Lo segundo: por más que miro webs e intento dar con ello, no consigo crear una carpeta ó directorio en la microSD. Ya puse los permisos correspondientes en AndroidManifest.xml
Código:
1
2
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
E incluso compruebo el estado de la microSD. Código:
1
2
3
4
5
6
7
8
9
10
11
12
13
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mExternalStorageAvailable = mExternalStorageWriteable = true;
Toast.makeText(getApplicationContext(), "se puede leer y escribir en la microSD", Toast.LENGTH_SHORT).show();
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
Toast.makeText(getApplicationContext(), "SÓLO ES POSIBLE leer la microSD", Toast.LENGTH_SHORT).show();
} else {
mExternalStorageAvailable = mExternalStorageWriteable = false;
Toast.makeText(getApplicationContext(), "NO SE PUEDE TRABAJAR CON LA microSD", Toast.LENGTH_SHORT).show();
}
Hasta ahora, lo único que he conseguido es que la carpeta se cree en la memoria interna. Incluso aún indicándole expresamente la ruta de la externa, no lo crea en la externa (microSD).
Código:
1
2
3
4
5
6
7
8
9
10
11
12
13
Environment.getExternalStorageDirectory();
File folder = new File(Environment.getExternalStorageDirectory() + "/map");
boolean success = (new File("/storage/map")).mkdir();
if (!folder.exists()) {
success = folder.mkdir();
}
if (success) {
// Do something on success
} else {
// Do something else on failure
}
break;
Me crea la carpeta map en /map de la interna (lógico), pero aún colocando /storage/.../ (que es de la externa).
Esto lo he puesto tanto en los dos sitios donde aparece ../map ó ...("/sstorage/map).
Dos dudas: si alguien pudiera responderme.
Gracias de antemano.
Saludos.
Valora esta pregunta
0