我正在尝试利用Samsung Galaxy Tablet上的USB主机功能。我从三星(http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA)购买了附件加密狗。当我第一次通过这个加密狗连接USB设备时,我从Galaxy平板电脑出现了高功率错误 - 仅供参考使用外部供电的USB集线器,您可以进行双向操作。
现在,当我连接时,设备本身正在确认USB外围设备的存在,我尝试使用Android的android.hardware.usb.UsbDevice; import 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加密狗(或没有加密狗加密狗),该设备每次都是相同的。输出如下:
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>
和设备过滤器:
(我删除了设备过滤器上的条件,但也尝试插入有关我正在寻找的设备的特定信息......两者都无济于事。)
非常感谢有关此问题的任何帮助!
另一个更新:我抱怨的设备总是在设备列表中枚举
device 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 firing)HID设备,arduino设备......遗憾的是......我的USB设备似乎没有激发意图或被USB集线器枚举。我尝试使用USB闪存驱动器并且DID枚举它并且工作...但它显示为列表中的SECOND设备,第一个是上面列出的永远存在的usbDevice。尽管如此,意图确实很有意思。
有没有人知道使用HID设备和其他USB设备制作意图的解决方法,除了现在选择的少数几个Android?
答案 0 :(得分:4)
答案 1 :(得分:1)
我遇到同样的问题,但您可以使用一个方法deviceName(),在枚举设备后,您可以使用device.getdeviceName()方法将设备名称存储在字符串中。
您将从设备的完整信息中获得确切的设备名称appart。
答案 2 :(得分:0)
三星已从Android内核中删除了USB API
答案 3 :(得分:0)
我认为您应该在resource / xml / device_filter.xml中定义要识别的设备。 你可以参考android api。
答案 4 :(得分:0)
可能有另一个(令人讨厌的)原因导致您无法看到您的HID设备。
within('#myform') do
find('label', text: "#{description}", match: :first).
first(:xpath, './/..').
find('button.delete').
click
end
“在monitorUsbHostBus()中从JNI调用以报告新的USB设备”。此方法调用私有方法UsbHostManager.beginUsbDeviceAdded()
,它将无条件地过滤掉所有HUB,并使用子类BOOT过滤HID。
这可能是您在执行isBlackListed()
如果有人对此有解决方法,我认为有相当数量的用户会很高兴看到这个。
答案 5 :(得分:-2)
我已成功将我的Arduino Uno连接到我的三星Galaxy tab 10 P7500。 如果您在连接时遇到问题,那是因为平板电脑拒绝对没有外部电源的USB设备进行许可。 尝试使用5或3.3伏交流/直流适配器从外部为设备供电,这是第一次,如果您发现设备已连接并启动意图,拔下电源适配器,并且您的设备无需外接电源即可运行,平板电脑本身也可以通过USB OTG提供电源