Я пытаюсь использовать возможности USB-хоста на планшете Samsung Galaxy. Я приобрел ключ для подключения у Samsung (http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA). Когда я впервые подключил USB-устройство через этот ключ, у меня была ошибка высокой мощности от Galaxy Tablet — к вашему сведению, я использую USB-концентратор с внешним питанием, и вы можете обойти это.
Теперь, когда само устройство признает наличие периферийного USB-устройства, когда я его подключаю, я попытался использовать Android android.hardware.usb.UsbDevice; импортировать android.hardware.usb.UsbManager; библиотека. Я видел, что есть два метода распознавания 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<String, UsbDevice> deviceList = manager.getDeviceList();
int count = deviceList.size();
Iterator<UsbDevice> iterator = deviceList.values().iterator();
if(iterator.hasNext()){
UsbDevice deviceVal = iterator.next();
testTxtView1.setText("set device " + deviceVal);
}
Предположительно, это захватит одно USB-устройство (в настоящее время поддерживается только одно 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 меняется каждый раз, когда я запрашиваю этот код (я просто помещаю его один экземпляр)
Я искал везде и не смог найти похожих проблем или решений, которые могли бы относиться к моей ситуации. Я попытался реализовать примеры USB из Google (по сути, это именно то, что у меня есть, я разорвал их) и столкнулся с этими проблемами.
Я также должен упомянуть состав моего манифеста:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.mit.ll.drm4000"
android:versionCode="1"
android:versionName="1.0">
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="12" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".DRM4000Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
and device filter:
(Я удалил критерии в фильтре устройств, но также пытался вставить конкретную информацию об устройстве, которое я ищу... безрезультатно.)
Любая помощь в отношении этой проблемы будет высоко оценена!
Еще одно обновление: устройство, на которое я жаловался, всегда перечислялось в списке устройств.
устройство 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 Намерение не срабатывает) HID-устройства, устройства arduino... и, к сожалению... мое USB-устройство, похоже, не запускает намерение или не перечисляется USB центр. Я попробовал с USB-накопителем, и он ДЕЙСТВИТЕЛЬНО перечислил его и работал ... однако он отображается как ВТОРОЕ устройство в списке, первым из которых является постоянно присутствующий usbDevice, указанный выше. Тем не менее, намерения срабатывают с этим.
Кто-нибудь знает обходной путь для запуска намерений с HID-устройствами и другими USB-устройствами, за исключением нескольких избранных Android, которые, похоже, делают сейчас?