我试图利用三星Galaxy平板电脑的USB主机功能。我从三星(http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA)购买了附件。当我第一次通过这个开关连接一个usb设备时,我在Galaxy平板电脑上出现了一个高功率的错误-- 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);当我附加任何设备时,这不是激发任何意图,strange...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设备( 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
^^ @406 ff4d8值每次查询这段代码时都会发生变化(我只是把它的一个实例打开)
我到处寻找,没有找到任何类似的问题或解决办法,可能适用于我的情况。我尝试过实现google的USB示例(这正是我所拥有的,我撕毁了他们的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>
和设备过滤器:
(我删除了设备筛选器上的条件,但也尝试插入有关我正在查看for...both的设备的特定信息,但没有效果。)
任何有关这个问题的帮助都将不胜感激!
另一个更新:我抱怨的设备总是被枚举在设备列表中。
设备usbDevice[mName=/dev/bus/usb/001/002,mVendorId=1256,mProductId=27033,mClass=0,mSubClass=0,mProtocol=0,mInterfaces=Landroid.os.Parcelable;@406ff4d8
肯定是安卓端的usb端口或something...because,我开始在我的代码上附加一些不同的设备,发现(类似于这个链接:USB_DEVICE_ATTACHED Intent not firing) HID设备,arduino devices..and可悲地.我的USB设备似乎没有激发意图或被USB集线器枚举。我尝试了一个USB闪存驱动器,它列举了它和worked...however,它显示为列表中的第二个设备,第一个是上面列出的始终存在的usbDevice。尽管如此,它的意图还是会着火的。
有谁知道用HID设备和其他USB设备来激发意图的解决办法吗?
发布于 2011-09-28 17:28:33
不幸的是,三星Galaxy平板电脑似乎与UsbManager和世界上大约一半的USB设备没有很好的结合。三星的内核似乎为存储设备之类的设备启动了内核,但对于HID和其他随机设备(例如arduino、我的usb传感器以及HID设备)则不起作用。这似乎是三星内核中的一个bug。有趣的是,HID设备在平板电脑上工作,但没有在UsbManager上进行枚举。我发现了相同问题的几个链接,似乎内核补丁(或宏碁平板电脑)是绕过这个atm的唯一方法。希望三星能在未来修复。这里有一个链接,指向一个做了内核修补程序的人,如果重新构建内核是你的事情,那么你真的需要让UsbManager工作。我还没有测试,但计划最终,并将留下评论,我的想法。http://forum.xda-developers.com/showthread.php?t=1233072
发布于 2012-02-13 09:24:33
我也面临同样的问题,但是您可以使用一个方法deviceName(),在枚举设备之后,可以使用device.getdeviceName()方法将设备名称存储在字符串中。
您将从设备的全部信息中获得确切的设备名称。
发布于 2011-10-02 21:33:58
三星已经从Android内核中删除了USB API。
https://stackoverflow.com/questions/7534878
复制相似问题