¿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:

 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.

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

  • Android: almacenamiento de imágenes descargadas desde la Web
  • Obtener directorio sdcard por adb
  • ¿Cómo usar SQLiteOpenHelper con la base de datos en sd-card?
  • ¿Por qué no se puede escribir en mi tarjeta SD (Android)?
  • ¿Cómo mostrar archivos en la tarjeta SD en un ListView?
  • No se puede mover una aplicación a la tarjeta SD
  • Permiso para escribir en la tarjeta SD android
  • Puede cargar dll android de sdcard en modo nativo
  • Android Eliminar imagen de la tarjeta SD con OnClick
  • Almacenar imagen de mapa de bits en tarjeta SD en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.