#android #usb
#Android #usb
Вопрос:
Я пытаюсь связаться с USB-устройством, используя acer iconia a500, обновленную до Android 3.2 (ядро 2.6.36.3 , без рутов, я просто использовал функцию регулярного обновления). В двух словах, происходит то, что после получения UsbManager getDeviceList возвращает пустую карту. То же самое происходит с образцом adbtest от Google:
mManager = (UsbManager)getSystemService(Context.USB_SERVICE);
// check for existing devices
for (UsbDevice device : mManager.getDeviceList().values()) {
// I get nothing here, the values() list is empty
Я пробовал несколько устройств (различные твердотельные диски usb, жесткий диск, мышь, часы Garmin и т. Д.). ничего. Некоторые устройства (диски, мышь) действительно распознаются ОС (они работают: я вижу файловую систему, мышь работает нормально и т. Д.), Но они не отражаются на уровне API.
Некоторые люди говорят, что мышь и клавиатура не перечисляются, но диски перечисляются, но они используют 3.1, в то время как я использую 3.2. Я также не получаю диск или что-либо еще, что я подключил.
Приведенный выше код должен перечислять все устройства. В любом случае, я также попробовал подход intent xml file, как описано в примерах Google. По-прежнему ничего.
Манифест кажется нормальным, и, как я уже сказал, образец adbtest прямо из sdk показывает ту же проблему.
Учитывая скудость API, я действительно не знаю, что попробовать дальше. Кто-нибудь успешно использовал режим хоста на iconia a500 с Android 3.2?
РЕДАКТИРОВАТЬ: я имею в виду «используется» на уровне API. Как я уже сказал, «стандартные» устройства распознаются на уровне ОС и работают, но не видны через API. В конце мне нужно связаться с нестандартным устройством в режиме хоста, поэтому мне действительно нужно получить его через API.
РЕДАКТИРОВАТЬ 2: я не собираюсь рутировать свое устройство, потому что мое приложение (если мне когда-нибудь удастся его написать 🙂 было бы бесполезно, если бы требовалось рутирование.
Спасибо!
- вик
Комментарии:
1. Я использовал клавиатуру, мышь и внешний жесткий диск NTFS с моей Iconia на 3.2.
2. да, как я уже сказал, я тоже. они работают сами по себе, но не перечисляются на уровне API, поэтому, хотя ОС может их видеть, я не могу (поэтому я не могу общаться с нестандартным устройством). Я уточню свой вопрос, спасибо!
3. Возможно, вы сможете связаться с разработчиком «Drive Mount» и узнать, как он работает. Приложение находится здесь: market.android.com/details?id=au.dach.drivemount
4. Я установил приложение, однако для этого требуется, чтобы устройство было внедрено. Это невозможно для моего приложения и не должно требоваться для usb-хоста (но, вероятно, потребуется смонтировать диск). Я еще уточню свой вопрос, спасибо.
Ответ №1:
Убедитесь, что ваш фильтр намерений не скрывает устройства.
http://developer.android.com/guide/topics/usb/host.html
«В общем, используйте идентификатор поставщика и продукта, если вы хотите фильтровать для определенного устройства, и используйте класс, подкласс и протокол, если вы хотите фильтровать для группы USB-устройств, таких как устройства хранения данных или цифровые камеры. Вы можете указать ни один или все эти атрибуты. Указание атрибутов no соответствует каждому USB-устройству, поэтому делайте это только в том случае, если это требуется вашему приложению: »
Скажите мне, работает ли это для вас.
Комментарии:
1. Я только что купил A500. Код, который у вас есть, работает и распознает другие планшеты… но вы правы, что он не распознает мою клавиатуру или мышь.
2. Мой A500 распознает (с помощью API): принтер, usb-накопитель, другие планшеты. Он не распознает: мыши / клавиатуры (даже без фильтров). Странно то (как вы указали), что мыши и клавиатуры работают на A500… они просто не отображаются в списке API «подключенных USB-устройств»
Ответ №2:
Попробуйте этот код,
mUsbManager = (UsbManager) getSystemService(USB_SERVICE);
HashMap<String, UsbDevice> devicelist = mUsbManager.getDeviceList();
Iterator<UsbDevice> deviceIterator = devicelist.values().iterator();
if (deviceIterator.hasNext()) {
while(deviceIterator.hasNext()) {
mUsbDeviceX = deviceIterator.next();
if (mUsbDeviceX != null) {
Log.v(Log_Tag, "ProdID: " mUsbDeviceX.getProductId());
Log.v(Log_Tag, "VendID: " mUsbDeviceX.getVendorId());
}
}
} else {
Log.v(Log_Tag, "No Usb Devices Attached");
}
Если это не сработает, покажите нам вывод dmesg / logcat здесь.