Я пытаюсь использовать возможности USB-хоста на планшете Samsung Galaxy Tablet. Я приобрел приставку от samsung (http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA). Когда я впервые подключил USB-устройство через этот донгл, у меня возникла ошибка высокой мощности от Galaxy Tablet - FYI используйте USB-концентратор с внешним питанием, и вы сможете обойти это.
Теперь, когда устройство само подтверждает существование периферийного USB-устройства при подключении, я попытался использовать Android android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; library. Я увидел, что есть два метода распознавания USB-устройства, регистрация широковещательного приемника для прослушивания намерений через
IntentFilter usbIntentFilter = new IntentFilter();
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_ATTACHED");
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED");
registerReceiver(mUsbReceiver,usbIntentFilter);
Это не вызывает никаких намерений, когда я подключаю какие-либо устройства, странно... хорошо. Поэтому я попробовал следующий метод: явный запрос списка устройств через UsbManager - это было сделано следующим образом:
HashMap deviceList = manager.getDeviceList();
int count = deviceList.size();
Iterator iterator = deviceList.values().iterator();
if(iterator.hasNext()){
UsbDevice deviceVal = iterator.next();
testTxtView1.setText("set device " + deviceVal);
}
Предположительно, это захватит одно (только одно USB-устройство, поддерживаемое в настоящее время согласно документации Google) USB-устройство, которое подключено в данный момент. Для проверки этого я бы вызвал вышеприведенный код при нажатии на кнопку и отобразил результаты работы устройства. По какой-то причине я получаю устройство из списка устройств каждый раз, независимо от того, подключен USB-ключ или нет. Более того, устройство каждый раз одно и то же, независимо от наличия (или отсутствия) USB-ключа. Вывод выглядит следующим образом:
устройство usbDevice[mName=/dev/bus/usb/001/002,mVendorId=1256,mProductId=27033,mClass=0,mSubClass=0,mProtocol=0,mInterfaces=[Landroid.os. Parcelable;@406ff4d8]
^^ значение @406ff4d8 меняется каждый раз, когда я запрашиваю этот код (я только что разместил его единственный экземпляр)
Я искал везде и не смог найти никаких похожих проблем или решений, которые могут быть применимы к моей ситуации. Я пытался реализовать примеры Google для USB (именно это я и сделал по сути, я содрал их) и столкнулся с этими проблемами.
Я также должен упомянуть состав моего манифеста:
и фильтра устройств:
(Я удалил критерии в фильтре устройств, но также попробовал вставить конкретную информацию об устройстве, которое я ищу... оба безрезультатно.)
Любая помощь по этой проблеме будет очень признательна!
Еще одно обновление: устройство, на которое я жаловался, всегда перечисляется в списке устройств
устройство usbDevice[mName=/dev/bus/usb/001/002,mVendorId=1256,mProductId=27033,mClass=0,mSubClass=0,mProtocol=0,mInterfaces=[Landroid. os.Parcelable;@406ff4d8]
должно быть, usb-порт на стороне android или что-то в этом роде... потому что я начал подключать кучу разных устройств к своему коду и обнаружил, что (аналогично этой ссылке: USB_DEVICE_ATTACHED Intent not firing) устройства HID, устройства arduino... и, к сожалению... мои USB-устройства не вызывают намерений и не перечисляются USB-концентратором. Я попробовал с USB-флешкой, и она ДЕЙСТВИТЕЛЬНО перечислилась и заработала... однако она отображается как ВТОРОЕ устройство в списке, первым является вечно присутствующее usbDevice, перечисленное выше. Однако намерения с ним выполняются.
Кто-нибудь знает обходной путь, чтобы заставить намерения работать с HID-устройствами и другими USB-устройствами, кроме избранных, которые, похоже, теперь делает android?