¿Cómo leer el número de identificación de la tarjeta SD?

¿Cómo puedo leer programáticamente el registro CID de la tarjeta SD, que contiene un número de serie y otra información? ¿Puedo hacerlo a través de Android Java o código nativo?

Gracias de antemano, Eric

Aquí está un ejemplo de código para obtener SID y CID

if (isExteranlStorageAvailable()) { try { File input = new File("/sys/class/mmc_host/mmc1"); String cid_directory = null; int i = 0; File[] sid = input.listFiles(); for (i = 0; i < sid.length; i++) { if (sid[i].toString().contains("mmc1:")) { cid_directory = sid[i].toString(); String SID = (String) sid[i].toString().subSequence( cid_directory.length() - 4, cid_directory.length()); Log.d(TAG, " SID of MMC = " + SID); break; } } BufferedReader CID = new BufferedReader(new FileReader( cid_directory + "/cid")); String sd_cid = CID.readLine(); Log.d(TAG, "CID of the MMC = " + sd_cid); } catch (Exception e) { Log.e("CID_APP", "Can not read SD-card cid"); } } else { Toast.makeText(this, "External Storage Not available!!", Toast.LENGTH_SHORT).show(); } 

Me las arreglé para encontrar mi tarjeta SD CID mediante la conexión de mi teléfono a mi ordenador a través de usb y el uso de la herramienta adb (Android SDK)

 $ adb shell # cat /sys/block/mmcblk0/../../cid 

Mi teléfono está enraizado por lo que no estoy seguro si esto es accesible en teléfonos no enraizados.

Intenta también

 $ adb shell # cd /sys/block/mmcblk0/../../ # ls block fwrev preferred_erase_size cid hwrev scr csd manfid serial date name subsystem driver oemid type erase_size power uevent 

Estos se explican en la documentación del núcleo http://www.mjmwired.net/kernel/Documentation/mmc/mmc-dev-attrs.txt

El único código que he encontrado hasta ahora para proporcionar el ID es C ++ o C # http://jo0ls-dotnet-stuff.blogspot.com/2008/12/read-secure-digital-sd-card-serial.html
http://jo0ls-dotnet-stuff.blogspot.com/2008/12/read-cid-and-csd-c-implementation.html
Si usted es un desarrollador de C + + puede ser capaz de tomar esto y hacer que funcione en Android.

Como escribió BMB, no se puede conocer la ruta real de la tarjeta SD en el sistema de archivos / sys. Sin embargo, / sys implementa alias también, y es posible que pueda recuperar el CID a través de / sys / block / mmcblk0 / device / cid.

Por ejemplo, en un tatuaje que ejecuta 2.2, / sys / block / mmcblk0 es un vínculo de software (establecido automáticamente por el sistema) en /sys/devices/platform/msm_sdcc.2/mmc_host/mmc1/mmc1:aaaa/block/mmcblk0.

Hay api en android para obtener la identificación serial de la tarjeta SD. El método se llama getFatVolumeId (String mountPoint), donde "mountPoint" es el nombre de la tarjeta sd (puede obtener este nombre llamando a Environment.getExternalStorageDirectory ()). Pero getFatVolumeId es kindof función oculta (u olvidada), por lo que desea crear el paquete en su proyecto llamado android.os y la clase en él para hacer referencia al método nativo, para poder llamarlo:

 package android.os; public class FileUtils { public static native int getFatVolumeId(String mountPoint); } 

Y el código es:

 File SdCard = Environment.getExternalStorageDirectory(); int Serial = FileUtils.getFatVolumeId(SdCard.getName()); 

Ver también los enlaces

http://groups.google.com/group/android-framework/browse_thread/thread/1abd18435ba20a67?pli=1 http://markmail.org/message/rdl4bhwywywhhiau#query:+page:1+mid:rdl4bhwywywhhiau+state: resultados

Hice este … trabajó para mí … esperanza que hace u claro!

 String getSDCARDiD() { try { File file = new File("/sys/block/mmcblk1"); if (file.exists() && file.isDirectory()) { memBlk = "mmcblk1"; } else { //System.out.println("not a directory"); memBlk = "mmcblk0"; } Process cmd = Runtime.getRuntime().exec("cat /sys/block/"+memBlk+"/device/cid"); BufferedReader br = new BufferedReader(new InputStreamReader(cmd.getInputStream())); sd_cid = br.readLine(); //System.out.println(sd_cid); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return sd_cid; } 

No hay una API de Android que pueda hacer esto de la que sepa y para una solución general que se necesita. Para proporcionar un cierto fondo la tarjeta del SD se conecta a un hw-controlador que es específico a la plataforma del dispositivo. Es posible leer el valor de cid desde el sistema de archivos linux / sys si conoce su plataforma. El siguiente fragmento funciona en mi droid (plataforma basada en TI omap) pero no en plataformas basadas en Qualcomm MSM.

 try { BufferedReader input = new BufferedReader(new FileReader("/sys/devices/platform/mmci-omap-hs.0/mmc_host/mmc0/mmc0:aaaa/cid")); String sd_cid = input.readLine(); Log.i("CID_APP", sd_cid); } catch (Exception e) { Log.e("CID_APP","Can not read SD-card cid"); } 

En otra plataforma, el archivo sys que estamos buscando es diferente. Puede incluso diferir entre diferentes tarjetas en la misma plataforma, ya que no fue capaz de probar eso. En dispositivos basados ​​en MSM, la ruta sería algo como /sys/devices/platform/msm_sdcc.1/mmc_host / …

Dado que tenemos esta dependencia de hardware en la lectura de la tarjeta SD CID, tendría que haber una actualización de la API de Android: s que proporciona acceso general. Esta API debería entonces ser implementada por cada fabricante de dispositivo para asignar al controlador correcto del controlador de tarjeta sd.

Yo estaba buscando esta función también, pero nunca podría obtener una solución elaborada a casa. Terminé encontrando una compañía que hace un lector SID. Vaya a nexcopy.com y busque en su sección de duplicador SD o microSD. Puede leer hasta 20 tarjetas a la vez.

A pesar de que el relativamente antiguo Palm OS y Windows Mobile OS dispositivos son capaces de leer la tarjeta SD ID, AFAIK dispositivos Android no son capaces de hacer eso todavía. Esto es particularmente preocupante dados los problemas con el Settings.Secure.ANDROID_ID discutido aquí .

para mmcblk0 , sólo escribe en shell como:

 cat /sys/block/mmcblk0/device/cid 2750485344303847307cf6851900b99b cat /sys/block/mmcblk0/device/serial 0x7cf68519 

se puede implementar en java fácilmente.

árbitro:
https://www.kernel.org/doc/Documentation/mmc/mmc-dev-attrs.txt
https://www.kernel.org/doc/Documentation/sysfs-rules.txt
http://www.cameramemoryspeed.com/sd-memory-card-faq/reading-sd-card-cid-serial-psn-internal-numbers/

Basándose en la respuesta de Dinesh …

Dinesh sugirió buscar en el directorio /sys/class/mmc_host/mmc1/mmc1:*/ (donde * es un número) para el archivo llamado cid , que nos da el contenido del registro CID de la tarjeta. Esto es funciona en muchos casos, y es un comienzo muy útil.

Pero mmc1 no siempre es la tarjeta SD extraíble. A veces, por ejemplo, en un Motorola Droid Pro con Android API de nivel 10, mmc0 es la tarjeta SD extraíble, y mmc1 es otra cosa. Supongo que mmc1 , cuando está presente, apunta al almacenamiento interno de algún tipo (posiblemente una tarjeta microSD no extraíble). En una tableta Android barata que probamos, mmc0 es la tarjeta SD y no hay mmc1 .

Así que no puede asumir que mmc1 es la tarjeta SD.

Un rayo de esperanza: Parece (hasta ahora) que al mirar el archivo de type en el mismo directorio que el archivo cid (por ejemplo /sys/class/mmc_host/mmc1/mmc1:0007/type ), podemos determinar cuál es cuál : un valor de tipo de SD indica una tarjeta SD extraíble, mientras que MMC no lo es.

Sin embargo, eso es sólo de pruebas en algunos dispositivos Android. No puedo encontrar ninguna especificación sobre el contenido del archivo de type , así que si alguien más sabe de la documentación pertinente, avíseme.

Por supuesto, MMC y SD son sólo dos estándares de tecnología de almacenamiento diferentes, y SD es compatible con MMC. Por lo tanto, no es necesariamente el caso de que el tipo SD siempre corresponde a una tarjeta microSD externa. No parece probable que MMC podría indicar una tarjeta microSD en absoluto (si el campo de tipo se rellena con precisión); pero por otro lado, es concebible que una tarjeta SD no extraíble podría tener el tipo SD .

Para más investigaciones: ¿Este enfoque funciona cuando una tarjeta microSD está conectada a través de un adaptador USB? Mi una prueba en esto, con una tableta, tenía la tarjeta microSD conectada USB show como mmc1 , con el tipo SD .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.