Ответ 1
Я нашел решение.
Самое простое решение - построить busybox и использовать его следующим образом: busybox blkid
Сложное решение - найти blkid для Android и найти то, что вам нужно в его исходном коде (функция blkid_dev_devname).
Можно ли узнать метку тома SD-карты, вставленной в Android-устройство?
Я понимаю, что Android имеет только одно "внешнее хранилище" (как возвращается Environment.getExternalStorageDirectory()
), но в дикой природе есть довольно много устройств, которые имеют внутреннюю флеш-память как "внешнее хранилище" и карту SD, смонтированную под этими или даже более дикими комбинациями (см. этот другой вопрос). Можно перечислять эти дополнительные устройства, читая /proc/mounts
, но нам нужно что-то идентифицировать их с пользователем. Есть ли шанс получить их метки тома?
Я проверил, что Linux vfat driver игнорирует метку тома вообще и что blkid
from util-linux читает сам vfat. Я также проверил, что, по крайней мере, на устройстве, которое у меня есть, блок-устройство SD-карты имеет режим 660
и владелец root.root
, поэтому я не могу этого сделать. Таким образом, в основном это сводится к тому, есть ли какая-либо утилита, которая могла бы читать ее.
Я нашел решение.
Самое простое решение - построить busybox и использовать его следующим образом: busybox blkid
Сложное решение - найти blkid для Android и найти то, что вам нужно в его исходном коде (функция blkid_dev_devname).
Я не знаю, как он работает именно в android, но в Linux у меня есть сообщение ядра об установке sd-карты, где указано имя тома. Вы можете попробовать dmesg и cat/sys/devices/mmc... (или что-то подобное)
Попробуйте разобрать вывод команды blkid
. Это работает для меня, но я не уверен, что это прошивка зависит от функции или нет. Я получил permission denied
с этой командой на AVD.
Я не знаю, поможет ли это вам: если вы используете DDMS, вы можете увидеть папки системы. В моем случае я нашел SD-карту в:/mnt/media_rw.
Вы можете получить дополнительную информацию здесь и здесь
Надеюсь, это поможет.