Проблема с USB-хостом в Android с планшетом Samsung Galaxy 10.1
Я пытаюсь использовать возможности USB-хоста на планшете Samsung Galaxy. Я приобрел ключ для крепления у Samsung ( http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA). Когда я впервые подключил USB-устройство через этот ключ, у меня была большая ошибка питания от Galaxy Tablet - FYI использует концентратор 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-устройство поддерживается в документации 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>
и фильтр устройства:
(Я удалил критерии на фильтре устройства, но также попытался вставить определенную информацию об устройстве, которое я ищу... оба безрезультатно.)
Любая помощь по этой проблеме будет высоко ценится!
Другое обновление: устройство, на которое я жаловался, всегда перечисляется в списке устройств
устройство 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?
6 ответов
SOO, к сожалению, похоже, что Samsung Galaxy Tablet просто не очень хорошо играет с UsbManager и примерно половиной USB-устройств в мире. Ядро в Samsung, похоже, предназначено для запоминающих устройств и тому подобного, но не для HID и других случайных устройств (таких как arduino, мой usb-датчик и HID-устройства). Похоже, это ошибка в ядре samsung. Интересно, что HID устройства работают на планшете, но не перечислены на UsbManager. Я нашел несколько ссылок на одну и ту же проблему, и похоже, что патч ядра (или планшет acer) - единственные способы обойти эту атм. надеюсь, самсунг исправит в будущем. Вот ссылка на парня, который сделал исправление ядра, если перестройка ядра - это ваша вещь, и вам действительно нужно, чтобы UsbManager работал. Я не проверял, но планирую со временем и оставлю комментарий к своим мыслям. http://forum.xda-developers.com/showthread.php?t=1233072
Я сталкиваюсь с той же проблемой, но вы можете использовать один метод deviceName(), после перечисления устройства вы можете сохранить имя устройства в строке с помощью метода device.getdeviceName().
вы получите точное имя устройства appart из полной информации об устройстве.
Может быть еще одна (неприятная) причина, по которой вы не видите свое HID-устройство.
UsbHostManager.beginUsbDeviceAdded()
Msgstr "Вызывается из JNI в monitorUsbHostBus() для сообщения о новых USB-устройствах". Этот метод вызывает закрытый метод isBlackListed()
который безоговорочно отфильтрует все HUB и HID с подклассом BOOT. Это может быть причиной того, что вы не видите устройства HID, когда вы делаете getDeviceList()
Если у кого-то есть обходной путь к этому, я думаю, что есть немало пользователей, которые хотели бы увидеть это.
Я думаю, что вы должны определить устройство, которое вы хотите распознать в resource/xml/device_filter.xml. Вы можете обратиться к Android API.
Я успешно прикрепил свой Arduino Uno к моей вкладке Samsung Galaxy Tab 10 P7500. Если у вас есть проблемы с подключением, это потому, что планшет запрещает разрешение для USB-устройств, которые не имеют внешнего источника питания. Попробуйте подключить внешнее устройство с помощью адаптера переменного или постоянного тока 5 или 3,3 В, впервые, если вы обнаружите, что ваше устройство подключено, и включите питание, отключите адаптер питания, и ваше устройство будет работать без внешнего питания, сам планшет будет дать питание через USB OTG