2011-11-16 23 views
10

Czy można znaleźć etykietę woluminu z kartą SD włożoną do urządzenia z systemem Android?Znajdź etykietę woluminu z kartą SD na urządzeniu z Androidem

Rozumiem, że Android został zaprojektowany tak, aby miał tylko jedną "pamięć zewnętrzną" (zwróconą przez Environment.getExternalStorageDirectory()), ale na wolności jest sporo urządzeń, które mają wewnętrzny flash jako "pamięć zewnętrzną" i kartę SD zamontowaną pod takie lub nawet bardziej dzikie kombinacje (patrz this other question). Możliwe jest wyliczenie tych dodatkowych urządzeń przez odczytanie /proc/mounts, ale potrzebujemy czegoś, aby je zidentyfikować. Czy jest szansa, aby dostać się do swoich etykiet wolumenu?

Sprawdziłem sterownik Linux vfat ignores the volume label dentry altogether i ten blkid od util-linux reads the vfat itself. Sprawdziłem również, że przynajmniej na urządzeniu mam, urządzenie blokowe karty SD ma tryb 660 i właściciela root.root, więc nie mogę tego zrobić. Zasadniczo sprowadza się to do tego, czy istnieje jakieś narzędzie, które mogłoby ją odczytać.

+1

Może to pomoże Ci http://stackoverflow.com/questions/3348643/how-to-read-the-sd-card-id-number/5191484#5191484 –

+0

@Drax: Nie, to może nie (poza tym, że już to wiemy). Nie ma to związku z etykietą wolumenu. Etykieta woluminu jest tym, co użytkownik * określa *, gdy formatuje kartę SD w swoim komputerze. –

Odpowiedz

0

Nie wiem jak to działa dokładnie w Androidzie, ale w Linuksie mam komunikat jądra o montażu karty SD, gdzie podano nazwę woluminu. Możesz spróbować dmesg i cat/sys/devices/mmc ... (lub coś podobnego)

+0

Dmesg nie może tego mieć, jeśli sterownik całkowicie je ignoruje, czy nie? I jak już wspomniano w komentarzach, '/ sys/devices/mmc ...' jest zupełnie inną rzeczą (ma CID, którego używamy, ale nie ma etykiety woluminu, która jest rzeczą systemu plików, a nie SD rzecz z karty). –

0

Spróbuj przeanalizować wynik polecenia blkid. Działa to dla mnie, ale nie jestem pewien, czy jest to funkcja zależna od oprogramowania układowego, czy nie. Dostałem permission denied tym poleceniem na AVD.

+0

To polecenie nie występuje na urządzeniach, które mamy. A jeśli sam skompilowałem to, to nie zadziałałoby, ponieważ nie miałoby uprawnień. –

+0

'blkid' działa bez uprawnień root'a zarówno na moim urządzeniu (z niestandardowym oprogramowaniem układowym 2.2), jak i na moim systemie Linux na pulpicie. Dlatego w ostateczności możesz spróbować dodać do swojego projektu funkcję 'blkid' przy pomocy NDK. Nie jest to łatwe ... – borisstr

+0

Oczywiście działa na komputerze, ale to zupełnie nieistotne, ponieważ nie jest to Android. Może również działać z niestandardowym oprogramowaniem układowym Androida, ale to wciąż nie ma znaczenia, ponieważ losowi użytkownicy nie mają niestandardowego oprogramowania układowego. Standardowe oprogramowanie sprzętowe nie ma go i nie pozwala na odczytanie surowego urządzenia z normalnej aplikacji. –

1

Znalazłem rozwiązanie.

Najprostszym rozwiązaniem jest zbudowanie busybox i używać go tak: BusyBox blkid

rozwiązanie skomplikowane jest znalezienie blkid dla Androida i znaleźć to, czego potrzebujesz w swoim kodzie źródłowym (funkcja blkid_dev_devname).

-1

Nie wiem, czy to może ci pomóc: jeśli korzystasz z DDMS, możesz zobaczyć foldery systemu. W moim przypadku znalazłem kartę SD w:/mnt/media_rw.

Można uzyskać więcej informacji here i here

Mam nadzieję, że to pomaga.

+0

Nie, to nie pomaga, ponieważ ddms nie działa na urządzeniu. Teraz, jeśli znalazłeś miejsce, w którym uzyskuje je ddms, może to być inna sprawa. –

+0

Nie uruchamiam DDMS na urządzeniu. Uruchomię DDMS na moim komputerze, który jest podłączony do urządzenia. Oczywiście twój komputer musi rozpoznać urządzenie. –

+0

I dlatego DDMS jest całkowicie absolutnie bezużyteczny dla urządzenia znajdującego się w czyimś ręce w pociągu. Tak, to pytanie nie jest jednoznaczne, ale jeśli masz komputer do analizy urządzenia i wiesz jak to zrobić, prawie na pewno znasz już etykiety. Ciekawym przypadkiem jest pobieranie etykiet z aplikacji na urządzeniu. –

Powiązane problemy