android - tarjeta - mover fotos a sd moto g 3
¿Cómo puedo recuperar el número de serie de una tarjeta SD en Android 7.0+? (3)
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 de manera bastante confiable, siempre y cuando la tarjeta SD esté insertada en una ranura para tarjeta SD incorporada (no montada a través del 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. Probé esto ejecutando 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 futuras referencias, nosotros (probando desde un shell 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,
¿Hay otra forma de obtener el número de serie de una tarjeta SD montada en Android 7.0 o posterior?
En su defecto, ¿existe 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 esté buscando bien.
Para asegurarme de que la pregunta sea clara, estoy hablando de lo que puede hacer una aplicación ordinaria (no de sistema) que se ejecuta en un dispositivo no rooteado, con los permisos que una aplicación normalmente puede solicitar y recibir.
Para su información, el directorio /sbin
no parece ser legible, por lo que comandos como /sbin/udevadm
no son una opción.
En Android N, el acceso a / sys nad / proc se restringió significativamente, esto se hizo para proporcionar espacios limitados donde se ejecutan las aplicaciones. Esto se explica en issuetracker.google.com/issues/37091475 como intencional. En realidad no se dice que no se pueda acceder a todos los datos en / sys, 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 están, presente un nuevo error donde se pueda evaluar la solicitud. Por ejemplo, / sys / devices / system / cpu está disponible para todos los procesos, por lo que es incorrecto decir que todo / sys está restringido.
Tengo el mal presentimiento de que Google está realizando cambios similares a Apple en los que no está permitido obtener id-s de hardware. Si eso no se resuelve, la solución es utilizar los ID de cuenta de Google en su lugar. Pero soy consciente de que no siempre es posible y requerirá cambios importantes en la lógica empresarial (licencias, etc.).
Esperemos que su issuetracker.google.com/issues/37705442 sea considerado positivamente.
otro SO relacionado que encontré: cambios en el sistema de archivos en Android Nougat
Use StorageVolume.getUuid () en StorageVolume que obtiene de StorageManager.
El valor es el ID de volumen asignado durante el formateo de la tarjeta, y su longitud / formato varía según el 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 nulo.
adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid
También puedes probar
sudo hwinfo --disk
para obtener información sobre sus discos, incluidas las tarjetas SD.
Intenta también
sudo hdparm -I /dev/sdb | more