我正在尝试利用三星 Galaxy 平板电脑上的 USB 主机功能。我从三星 ( http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA )购买了附件加密狗。当我第一次通过这个加密狗连接 USB 设备时,我遇到了 Galaxy 平板电脑的高功率错误——仅供参考,我使用的是外部供电的 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);
}
这可能会抓取当前连接的一个(每个 Google 文档当前仅支持一个 USB 设备)USB 设备。为了测试这一点,我会在单击按钮时调用上面的代码并显示设备结果。出于某种原因,我每次都从设备列表中获取一个设备,无论是否连接了 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 示例(这正是我本质上拥有的,我撕掉了他们的)并且遇到了这些问题。
我还应该提到我的清单的构成:
<?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]
必须是android端usb端口或其他东西......因为我开始将一堆不同的设备附加到我的代码并发现(类似于此链接: USB_DEVICE_ATTACHED Intent not fire)HID设备,arduino设备......可悲的是......我的 USB 设备似乎没有触发意图或被 USB 集线器枚举。我尝试使用 USB 闪存驱动器,它确实枚举它并工作......但是它显示为列表中的第二个设备,第一个是上面列出的永远存在的 usbDevice。不过,意图确实会触发它。
有没有人知道使用 HID 设备和其他 USB 设备触发意图的解决方法,除了少数几个 android 现在似乎可以这样做?