Obtener una lista de almacenamiento externo en Android 4.3
He estado escaneando /etc/vold.fstab para obtener una lista de almacenamiento externo. Funciona bien hasta Android 4.3 que Google eliminó el archivo. Sé que ahora se utiliza un archivo unificado /fstab.* pero que es inaccesible sin root.
Así que en Android 4.3, ¿qué debo hacer para obtener una lista de almacenamiento externo?
- Abra cualquier SQLiteDatabase como su / root
- Bloqueo antes de que se inicie la aplicación: SecurityException: denegación de permisos: INTERACT_ACROSS_USERS_FULL
- ¿Cómo solicito acceso root en Android?
- Cómo cambiar el id de grupo de un archivo en el dispositivo android arraigado?
- Android: cambia la configuración del sistema de un dispositivo enraizado desde la aplicación
Mi código se parece a esto. Ahora incluye tanto el almacenamiento externo no extraíble como el extraíble.
File voldFile = new File("/system/etc/vold.fstab"); fr = new FileReader(voldFile); br = new BufferedReader(fr); String line = br.readLine(); while (line != null) { if (line.startsWith("dev_mount")) { String[] tokens = line.split("\\s"); File mountPoint = new File(tokens[2]); if (mountPoint.isDirectory() && mountPoint.canRead()) list.add(tokens[2]); } line = br.readLine(); }
- Visualización de archivos de acceso root / carpetas de android en Windows
- Acceso incoherente a los directorios en el teléfono enraizado
- ¿Es posible ejecutar un comando de shell como root con sólo el binario su y sin SuperSU o Superuser apk instalado?
- ¿Qué permisos se pueden conceder a los dispositivos enraizados?
- usuario root puede acceder a almacenamiento interno en Android?
- ANDROID: ¿Cómo obtener acceso root en una aplicación de Android?
- ¿Cómo puede mi aplicación acceder a privilegios de nivel de administración en un dispositivo no enraizado?
- Cómo quitar la aplicación del lanzador (en un dispositivo arraigado) programáticamente
Terminé escaneando la salida de / proc / mounts para el almacenaje montado actualmente. Código similar al siguiente.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { File voldFile = new File("/proc/mounts"); fr = new FileReader(voldFile); br = new BufferedReader(fr); String line = br.readLine(); while (line != null) { Log.d(TAG, line); if (line.startsWith("/")) { String[] tokens = line.split("\\s+"); if ("vfat".equals(tokens[2])) { File mountPoint = new File(tokens[1]); if (!tokens[1].equals(defaultMount)) if (mountPoint.isDirectory() && mountPoint.canRead()) list.add(tokens[1]); } } line = br.readLine(); } }
- Cómo obtener el tamaño de la tarjeta SD de Android?
- Desarrollo de aplicaciones Android utilizando NFC con emulador