我试图利用三星Galaxy平板电脑的USB主机功能。我从三星购买了附件加密狗(http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA)。当我第一次通过这个软件狗连接一个USB设备时,我有一个来自Galaxy平板电脑的高功率错误 - 仅供参考使用一个外部供电的USB集线器,您可以通过这个连接。三星Galaxy 10.1平板电脑的Android USB主机问题
既然设备本身在连接USB设备时确认存在,我尝试使用Android的android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager;图书馆。我看到有通过
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);
两种方法用于识别USB设备,注册广播接收器监听的意图这不是射击任何意图,当我附加任何设备,奇怪... OK。所以,我继续尝试下一个方法:明确查询通过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设备。为了测试这个,我会在点击按钮时调用上面的代码并显示设备结果。出于某种原因,我每次都从设备列表中获取设备,无论是否连接USB加密狗。此外,无论USB加密狗(或缺少USB加密狗),该设备每次都是相同的。输出如下:
device usbDevice [mName =/dev/bus/usb/001/002,mVendorId = 1256,mProductId = 27033,mClass = 0,mSubClass = 0,mProtocol = 0,mInterfaces = [Landroid .os.Parcelable; @ 406ff4d8]
^^的@ 406ff4d8值改变我每次查询这个代码的时间(我只是把它的单个实例上)
我已经到处找,也没有能找到可能适用于我的情况的任何类似问题或解决方案。我尝试过实施谷歌的USB例子(这正是我的本质,我扯了他们的),并遇到这些问题。
我还要提到我的清单的妆容:
<?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>
和设备筛选器:
(我删除了设备过滤器上的标准,但也试图插入有关d的具体信息evice我正在寻找......都无济于事。)
任何关于这个问题的帮助将不胜感激!
另一个更新:我抱怨的装置大约总是被列举的设备列表上
设备usbDevice [MNAME =的/ dev /总线/ USB/001/002,mVendorId = 1256,mProductId = 27033, mClass = 0,mSubClass = 0,mProtocol = 0,mInterfaces = [Landroid.os.Parcelable; @ 406ff4d8]
必须是android端usb端口什么的...因为我开始附加一堆不同的设备到我的代码,并发现(类似于这个链接: USB_DEVICE_ATTACHED Intent not firing)HID设备,arduino devices..and悲伤......我的USB设备似乎没有触发一个意图或被枚举USB集线器。我尝试了一个USB闪存驱动器,它列举了它,然后工作......但是它显示为列表中的第二个设备,第一个是上面列出的usbDevice。尽管如此,意图还是会随之而来。
有没有人知道一个解决方案,使意图火与HID设备和其他USB设备,除了选择几个android似乎现在做?
你能证实USB主机适用于任何其他应用程序吗?尝试连接PTP相机,看看画廊是否注意到广播的意图。我假设你已经尝试重新启动并将你的Tab更新到最新版本。 –
当我插入键盘时,它似乎工作。我插入时会出现“USB Device Connected”(USB设备已连接)信息。但是,上面的代码为我提供了与键盘相同的输出,插入了其他USB设备,或者没有插入任何设备。我不明白为什么它声称会看到无论是USB设备。我知道它必须是我的代码的东西,因为键盘被识别得很好。顺便说一句:当我连接其他设备它说:“未知的USB设备连接” – hinklecw
另一个更新:我抱怨总是在设备列表上枚举的设备必须是Android的USB端口或什么...因为我开始附加一堆不同的设备到我的代码,发现(类似于这个链接:USB_DEVICE_ATTACHED意图不能触发)HID设备,arduino设备和我的USB设备不会触发意图或被USB集线器枚举。我尝试了一个USB闪存驱动器,它列举了它,然后工作......但是它显示为列表中的第二个设备,第一个是上面列出的usbDevice。尽管如此,意图还是会随之而来。 – hinklecw