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

时间:2011-09-23 21:08:00

标签: android usb host galaxy-tab

我正在尝试利用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?

6 个答案:

答案 0 :(得分:4)

不幸的是,SOO看起来好像三星Galaxy平板电脑与UsbManager和世界上大约一半的USB设备不能很好地配合。三星的内核似乎可以解决存储设备等问题,但不适用于HID和其他随机设备(例如arduino,我的usb传感器和HID设备)。这似乎是三星内核中的一个错误。有趣的是,HID设备在平板电脑上工作,但在UsbManager上没有枚举。我找到了几个相同问题的链接,看起来像内核补丁(或宏碁平板电脑)是解决这个问题的唯一方法。希望三星将在未来修复。这里有一个链接到一个内核补丁的人,如果重建内核是你的事情,你真的需要让UsbManager工作。我没有测试,但计划最终,并将对我的想法发表评论。 http://forum.xda-developers.com/showthread.php?t=1233072

答案 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()

时看不到HID设备的原因

如果有人对此有解决方法,我认为有相当数量的用户会很高兴看到这个。

答案 5 :(得分:-2)

我已成功将我的Arduino Uno连接到我的三星Galaxy tab 10 P7500。 如果您在连接时遇到问题,那是因为平板电脑拒绝对没有外部电源的USB设备进行许可。 尝试使用5或3.3伏交流/直流适配器从外部为设备供电,这是第一次,如果您发现设备已连接并启动意图,拔下电源适配器,并且您的设备无需外接电源即可运行,平板电脑本身也可以通过USB OTG提供电源