¿Cómo puedo recuperar el número de serie de una tarjeta SD en Android 7.0+?
En algunas versiones de Android y otras variantes de Linux es posible obtener el número de serie de una tarjeta SD montada, por ejemplo leyendo el contenido de /sys/class/mmc_host/mmc0/mmc0:0001/serial
o /sys/block/mmcblk0/device/serial
(los números específicos pueden variar). En mis pruebas esto ha funcionado bastante fiable, siempre y cuando la tarjeta SD se inserta en una ranura para tarjeta SD incorporada (no montada a través de adaptador USB).
Pero a partir de Android 7.0 Nougat, se dice que el sistema operativo está bloqueando el acceso a esta información, al menos en algunos dispositivos. He probado esto mediante la ejecución de una aplicación de prueba en un nuevo Alcatel A30 GSM (Android 7.0), y de hecho el enfoque anterior falla con un error de permiso:
- Notificación de eliminación de SDcard, cómo se hace? ¿Difusión o servicio?
- Cómo acceder a archivos de vídeo de la carpeta de tarjetas SD en la aplicación de Android
- Cómo crear una carpeta en sdcard en android
- Cómo obtener los nombres de archivo almacenados en la tarjeta sd en android
- ¿La desinstalación de una aplicación android borra la base de datos almacenada en sdcard?
java.io.FileNotFoundException: /sys/block/mmcblk0/device/serial (Permission denied) at java.io.FileInputStream.open(Native Method)
Para referencia futura, nosotros (prueba desde un shell de adb) tenemos permisos para ls -ld
lo siguiente:
-
/sys/class/mmc_host
pero no/sys/class/mmc_host/mmc0
-
/sys/block
pero no/sys/block/mmcblk0
Dado que el enfoque anterior ya no funciona,
-
¿Existe otra manera de obtener el número de serie de una tarjeta SD montada en Android 7.0 o posterior?
-
A falta de eso, ¿hay alguna documentación u otra declaración de Google sobre los planes para proporcionar o no esta función? No he encontrado nada en el rastreador de problemas de Android, pero tal vez no estoy buscando bien.
Para asegurarse de que la pregunta es clara, estoy hablando de lo que puede hacer una aplicación ordinaria (que no sea del sistema) que se ejecuta en un dispositivo no enraizado, con los permisos que una aplicación normalmente puede solicitar y recibir.
FYI, el directorio /sbin
no parece legible, por lo que comandos como /sbin/udevadm
no son una opción.
- Buscar una ubicación de tarjeta SD externa
- Que muestra la imagen de sdcard con webview no funciona
- Obtener imágenes de la tarjeta SD - android
- Cómo leer un archivo directamente desde un archivo .zip sin extraerlo en android
- ¿Dónde almacena el emulador de Android los archivos de la tarjeta SD?
- Servidor FTP de Android
- org.openqa.selenium.WebDriverException: No se puede crear el directorio temporal: / sd card / 1339054625829.
- ¿Es posible mover el DB interno a la tarjeta SD?
En Android N, el acceso a / sys nad / proc fue significativamente restringido, esto se hizo para proporcionar cajas de seguridad más estrictas donde se ejecutan las aplicaciones. Esto se explica en https://issuetracker.google.com/issues/37091475 como intencional. En realidad no se dice que todos los datos en / sys no son accesibles, y Google está abierto para permitir el acceso a otros archivos desde esta ubicación:
Si hay archivos específicos en / sys que cree que deberían estar disponibles para las aplicaciones, pero no lo son, por favor, coloque un nuevo error en el que se pueda evaluar la solicitud. Por ejemplo, / sys / devices / system / cpu está disponible para todos los procesos, por lo que es inexacto decir que todo / sys está restringido.
Tengo una mala sensación de que google está haciendo cambios similares a Apple, donde no se permite ganar hardware id-s. Si eso no se resuelve, entonces la solución es usar ID de cuenta de Google en su lugar. Pero soy consciente de que no siempre es posible, y requerirá grandes cambios en la lógica de negocio (licencias, etc.).
Esperemos que su informe de errores se considerará positivamente.
Otro relacionado SO Encontré: Cambios en el sistema de archivos de Android Nougat
Utilice StorageVolume.getUuid () en StorageVolume que obtiene de StorageManager.
El valor es ID de volumen asignado durante el formateo de la tarjeta, y su longitud / formato difiere dependiendo del tipo de sistema de archivos. Para FAT32 es XXXX-XXXX, para NTFS es una cadena hexadecimal más larga, para el almacenamiento masivo interno devuelve null.
adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid
También puedes probar
sudo hwinfo --disk
Para obtener información sobre los discos, incluidas las tarjetas SD.
Intenta también
sudo hdparm -I /dev/sdb | more