2011-11-16 8 views
10

Est-il possible de connaître le volume de la carte SD insérée dans l'appareil Android? Je comprends qu'Android est conçu pour avoir un seul "stockage externe" (tel que renvoyé par Environment.getExternalStorageDirectory()), mais il y a quelques périphériques dans la nature qui ont un flash interne comme "stockage externe" et une carte SD montée sous cela ou même des combinaisons plus sauvages (voir this other question). Il est possible d'énumérer ces périphériques supplémentaires en lisant /proc/mounts, mais nous avons besoin de quelque chose pour les identifier à l'utilisateur. Y a-t-il une chance d'accéder à leurs étiquettes de volume? J'ai vérifié que le pilote Linux vfat ignores the volume label dentry altogether et blkid de util-linux reads the vfat itself. J'ai également vérifié que, au moins sur l'appareil que j'ai, le dispositif de bloc de la carte SD a le mode 660 et propriétaire root.root, donc je ne peux pas faire cela. Donc, fondamentalement, cela revient à savoir s'il existe un utilitaire qui pourrait le lire disponible.Rechercher une étiquette de volume de carte SD sur Android

+1

mai cela vous aidera http://stackoverflow.com/questions/3348643/how-to-read-the-sd-card-id-number/5191484#5191484 –

+0

@Drax: Non, peut-être pas (d'ailleurs nous le savons déjà). C'est totalement sans rapport avec le volume. L'étiquette de volume est ce que l'utilisateur * spécifie * lorsqu'il formate la carte SD sur son ordinateur. –

Répondre

0

je ne sais pas comment cela fonctionne exactement dans Android, mais dans linux j'ai un message du noyau sur le montage-carte SD, où le nom de volume spécifié. Vous pouvez essayer dmesg et cat/sys/devices/mmc ... (ou quelque chose comme ça)

+0

Dmesg ne peut pas l'avoir si le pilote l'ignore complètement, ou est-ce possible? Et comme déjà mentionné dans les commentaires, '/ sys/devices/mmc ...' est complètement différent (il a CID, que nous utilisons, mais n'a pas le label de volume, qui est une chose de système de fichiers, pas un SD chose de carte). –

0

Essayez d'analyser la sortie de la commande blkid. Cela fonctionne pour moi, mais je ne suis pas sûr si c'est une fonctionnalité dépendante du firmware ou non. J'ai obtenu permission denied avec cette commande sur AVD.

+0

La commande n'existe pas sur les périphériques dont nous disposons. Et si je le compilais moi-même, ça ne marcherait pas, parce qu'il n'aurait pas les permissions. –

+0

'blkid' fonctionne sans les permissions root à la fois sur mon appareil (avec le firmware 2.2 personnalisé) et sur mon système Linux. Donc, en dernier recours, vous pourriez essayer d'inclure la fonctionnalité 'blkid' à votre projet avec l'aide de NDK. Pas facile cependant ... – borisstr

+0

Bien sûr cela fonctionne sur le bureau, mais c'est totalement hors de propos puisque ce n'est pas Android. Il peut également fonctionner avec un microprogramme Android personnalisé, mais cela n'a pas d'importance, car les utilisateurs aléatoires n'ont pas de microprogramme personnalisé. Le firmware standard ne l'a pas et ne permet pas de lire le périphérique brut à partir d'une application normale. –

1

J'ai trouvé une solution.

La solution est plus facile à construire busybox et l'utiliser comme ceci: busybox blkid

solution Compliqué est de trouver blkid pour Android et trouver ce dont vous avez besoin dans son code source (fonction blkid_dev_devname).

-1

Je ne sais pas si cela peut vous aider: si vous utilisez le DDMS vous pouvez voir les dossiers du système. Dans mon cas, j'ai trouvé la carte SD dans:/mnt/media_rw.

Vous pouvez obtenir plus d'informations et herehere

J'espère que ça aide.

+0

Non, cela n'aide pas, car ddms ne fonctionne pas sur le périphérique. Maintenant, si vous avez trouvé où ddms les obtient, cela pourrait être une autre affaire. –

+0

Je n'exécute pas le DDMS sur le périphérique. Je cours le DDMS sur mon ordinateur, qui est connecté à l'appareil. Bien sûr, votre ordinateur doit reconnaître l'appareil. –

+0

Et DDMS est donc absolument totalement inutile pour un appareil dans la main de quelqu'un dans un train. Oui, la question ne l'indique pas explicitement, mais si vous avez un ordinateur pour analyser l'appareil et savoir comment, vous connaissez certainement déjà les étiquettes de toute façon. Le cas intéressant est d'obtenir les étiquettes d'une application sur l'appareil. –