Come leggere il numero ID della scheda SD?

Come posso leggere comodamente il registro CID della scheda SD, che contiene un numero di serie e altre informazioni? Posso farlo tramite Android Java o Native code?

Grazie in anticipo, Eric

  • Il tag Android non è corretto in vista: null (CursorAdapter e DataBinding)
  • Come avviare un'attività dal browser in android?
  • TextToSpeech cambia voce
  • Android: Canvas.DrawBitmap VS Drawable.Draw - Maggiore spinta di performance
  • Android - Imansible trovare lo stile 'mapViewStyle' nel tema corrente
  • Aggiungi evento settimanale al calendario
  • 11 Solutions collect form web for “Come leggere il numero ID della scheda SD?”

    Ecco il codice di esempio per get SID e 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(); } 

    Sono riuscito a trovare il mio CID della scheda SD collegando il mio telefono al mio computer tramite usb e utilizzando lo strumento adb (Android SDK)

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

    Il mio telefono è radicato quindi non so se questo sia accessibile sui telefoni non radicati.

    Provate anche

     $ 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 

    Questi sono spiegati nella documentazione del kernel http://www.mjmwired.net/kernel/Documentation/mmc/mmc-dev-attrs.txt

    L'unico codice che ho trovato finora per fornire l'id è 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
    Se sei uno sviluppatore C ++ puoi essere in grado di prendere questo e farlo funzionare su Android.

    Come ha scritto BMB, non è ansible conoscere il path reale della scheda SD nel file system / sys. Tuttavia, / sys implementa anche alias e potrebbe essere ansible recuperare il CID tramite / sys / block / mmcblk0 / device / cid.

    Ad esempio, su un Tattoo in esecuzione 2.2, / sys / block / mmcblk0 è un collegamento morbido (stabilito automaticamente dal sistema) a /sys/devices/platform/msm_sdcc.2/mmc_host/mmc1/mmc1:aaaa/block/mmcblk0.

    C'è api in android per get ID seriale di scheda SD. Il metodo viene chiamato getFatVolumeId (String mountPoint), where "mountPoint" è il nome della scheda SD (è ansible get questo nome chiamando Environment.getExternalStorageDirectory ()). Ma getFatVolumeId è una function nascosta (o dimenticata) di kindof, quindi vuoi creare un pacchetto nel tuo progetto denominato android.os e la class in esso per fare riferimento al metodo nativo per poterlo call:

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

    E il codice è:

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

    Vedi anche i link

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

    Ho fatto questo … ha funzionato per me … spero che renda u chiaro!

     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; } 

    Non esiste alcuna API Android che può farlo per essere consapevole e per una soluzione generale necessaria. Per fornire un certo background la scheda SD è collegata a un hw-controller specifico della piattaforma del dispositivo. È ansible leggere il valore del cid dal file system linux / sys se conosci la tua piattaforma. Il seguente snippet funziona sul mio droide (piattaforma basata su TI omap), ma non su piattaforms basate su 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"); } 

    Su un'altra piattaforma il file sys che cerchiamo è diverso. Può addirittura differire tra le diverse tabs sulla stessa piattaforma poiché non è stato in grado di testare questo. Sui dispositivi basati su MSM il path sarebbe qualcosa come /sys/devices/platform/msm_sdcc.1/mmc_host / …

    Dato che abbiamo questa dipendenza hardware dalla lettura del CID della scheda SD, dovresti essere un aggiornamento per l'API Android che fornisce un accesso generale. Questa API dovrebbe quindi essere implementata da each produttore di dispositivi per mappare il corretto driver del controller di scheda SD.

    Stavo cercando anche questa function, ma non avrei mai potuto get una soluzione di birra a casa. Ho finito per trovare una società che faccia un lettore SID. Vai a nexcopy.com e guarda nella loro sezione di duplicatori SD o microSD. Può leggere fino a 20 tabs alla volta.

    Anche se i dispositivi Palm OS e Windows Mobile OS relativamente antichi sono in grado di leggere l'ID della scheda SD, i dispositivi Android AFAIK non sono ancora in grado di farlo. Questo è particolarmente preoccupante dato i problemi con le impostazioni.Secure.ANDROID_ID qui discusso.

    per mmcblk0 , basta scrivere in shell come:

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

    è ansible implementarlo in java facilmente.

    ref:
    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/

    Sulla base della risposta di Dinesh …

    Dinesh ha suggerito di guardare nella directory /sys/class/mmc_host/mmc1/mmc1:*/ (where * è un numero) per il file denominato cid , che ci dà il contenuto del registro CID della scheda. Questo funziona in molti casi ed è un inizio molto utile.

    Ma mmc1 non è sempre la scheda SD rimovibile. A volte, ad esempio su un Motorola Droid Pro con livello Android API 10, mmc0 è la scheda SD rimovibile, e mmc1 è qualcos'altro. Sto ipotizzando che mmc1 , quando presente, punta ad una memorizzazione interna di qualche tipo (forse una scheda microSD non rimovibile). Su un tablet Android economico che abbiamo testato, mmc0 è la scheda SD e non esiste mmc1 .

    Quindi non puoi solo supporre che mmc1 sia la scheda SD.

    Un brivido di speranza: sembra (finora) che, guardando il file di type nella stessa directory del file cid (es /sys/class/mmc_host/mmc1/mmc1:0007/type ), possiamo determinare quale è quale : un valore di tipo SD indica una scheda SD rimovibile, mentre MMC non lo è.

    Tuttavia, questo è solo dal test su alcuni dispositivi Android. Non riesco a trovare alcuna specifica circa il contenuto del file di type , quindi se qualcun altro sa della documentazione pertinente, per favore fatemelo sapere.

    Naturalmente, MMC e SD sono solo due standard di tecnologia di storage diversi e SD è compatibile con MMC. Quindi non è necessariamente il caso che il tipo SD corrisponda sempre a una scheda microSD esterna. Non sembra probabile che MMC potrebbe indicare una scheda microSD a tutti (se il field di tipo è popolato in modo accurato); ma d'altra parte, è ansible che una SD non rimovibile possa avere tipo SD .

    Per ulteriori ricerche: Questo approccio funziona quando una scheda microSD è collegata tramite una scheda USB? Il mio test su questo, con una tavoletta, aveva la scheda microSD connessa USB come mmc1 , con tipo SD .

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.