Режим USB-хоста с Iconia A500 и Android 3.2: нет устройств - PullRequest
3 голосов
/ 23 октября 2011

Я пытаюсь связаться с 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: Я не собираюсь рутировать свое устройство, потому что мое приложение (если мне когда-нибудь удастся написать его :-) будет бесполезным, если потребуется рутирование.

Спасибо!

  • Vic

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Убедитесь, что ваш фильтр намерений не скрывает устройства.

http://developer.android.com/guide/topics/usb/host.html

"Как правило, используйте идентификатор поставщика и продукта, если вы хотите фильтровать для конкретного устройства, а также класс, подкласс и протокол, если вы хотите фильтровать группу USB-устройств, таких как устройства хранения данных или цифровые камеры. Вы можете указать ни один, ни все эти атрибуты. Указание атрибутов не соответствует каждому USB-устройству , поэтому делайте это только в том случае, если это требуется для вашего приложения: "

Скажите, работает ли он у вас.

0 голосов
/ 04 января 2013

Попробуйте этот код,

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 здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...