三星Galaxy 10.1平板电脑的安卓Usb主机问题



我正在尝试利用三星Galaxy Tablet的USB主机功能。我从三星(http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA)购买了附件加密狗。当我第一次通过这个加密狗连接usb设备时,我从Galaxy Tablet中获得了高功率错误-仅供参考,使用外部供电的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/汽车/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/汽车/usb/001/002, mVendorId = 1256, mProductId = 27033, mClass = 0, mSubClass = 0, mProtocol = 0, mInterfaces = [Landroid.os.Parcelable; @406ff4d8]

一定是android侧的usb端口或什么…因为我开始将一堆不同的设备附加到我的代码中,并发现(类似于这个链接:USB_DEVICE_ATTACHED意图不触发)HID设备,arduino设备…可悲的是…我的USB设备似乎没有触发意图或被USB集线器枚举。我尝试了一个USB闪存驱动器,它确实枚举它并工作…然而,它显示为列表中的第二个设备,第一个是上面列出的始终存在的usbDevice。然而,意图确实与它有关。

有没有人知道一个解决方案,使意图火与HID设备和其他USB设备,除了选择少数android似乎做现在?

很不幸,三星Galaxy Tablet似乎不能很好地与UsbManager和世界上大约一半的USB设备配合使用。三星的内核似乎对存储设备之类的东西有兴趣,但对HID和其他随机设备(比如arduino,我的usb传感器,以及HID设备)没有兴趣。这似乎是三星内核的一个bug。有趣的是,HID设备在平板电脑上工作,但没有在UsbManager上枚举。我发现了几个相同问题的链接,似乎内核补丁(或宏碁平板电脑)是解决这个问题的唯一方法。希望三星能在未来解决这个问题。如果重建内核是你的事情,并且你真的需要让UsbManager工作,这里有一个做内核补丁的人的链接。我还没有测试,但计划最终,并将留下我的想法的评论。http://forum.xda-developers.com/showthread.php?t=1233072

我面临同样的问题,但您可以使用一个方法deviceName(),枚举设备后,您可以使用device. getdevicename()方法将设备名称存储在字符串中。

您将从设备的完整信息中获得确切的设备名称。

三星已经从Android内核中删除了USB API

我认为你应该在resource/xml/device_filter.xml中定义你想要识别的设备。你可以参考android api

可能还有另一个(讨厌的)原因导致你看不到你的HID设备。

UsbHostManager.beginUsbDeviceAdded() "在monitorUsbHostBus()中从JNI调用以报告新的USB设备"。这个方法调用一个私有方法isBlackListed(),它将无条件地过滤掉所有的HUB和带有子类BOOT的HID。这可能就是为什么当你执行getDeviceList()

时看不到HID设备的原因。

如果有人有解决这个问题的方法,我想有相当多的用户会喜欢看到这个。

我已经成功地将我的Arduino Uno连接到我的三星galaxy tab 10 P7500。如果你连接有问题,那是因为平板电脑拒绝允许没有外部电源的usb设备。尝试使用5或3.3伏AC/DC适配器为设备外部供电,第一次,如果您发现设备已连接并启动意图,拔掉电源适配器,设备将在没有外部电源的情况下运行,平板电脑本身将通过USB OTG提供电源

相关内容

  • 没有找到相关文章

最新更新