6

我正在尝试利用三星 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 现在似乎可以这样做?

4

6 回答 6

5

SOO 不幸的是,看起来三星 Galaxy 平板电脑与 UsbManager 和世界上大约一半的 USB 设备不能很好地配合使用。三星的内核似乎会触发存储设备等的意图,但不会触发 HID 和其他随机设备(例如 arduino、我的 USB 传感器和 HID 设备)。这似乎是三星内核中的一个错误。有趣的是,HID 设备在平板电脑上工作,但在 UsbManager 上没有枚举。我发现了相同问题的几个链接,似乎内核补丁(或 acer 平板电脑)是解决此 atm 的唯一方法。希望三星将来会修复。如果重建内核是你的事并且你真的需要让 UsbManager 工作,那么这里是一个做了内核补丁的人的链接。我还没有测试,但计划最终, http://forum.xda-developers.com/showthread.php?t=1233072

于 2011-09-28T17:28:33.457 回答
1

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

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

于 2012-02-13T09:24:33.700 回答
0

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

于 2011-10-02T21:33:58.250 回答
0

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

于 2013-06-13T07:28:33.583 回答
0

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

UsbHostManager.beginUsbDeviceAdded()“从 monitorUsbHostBus() 中的 JNI 调用以报告新的 USB 设备”。此方法调用一个私有方法,该方法isBlackListed()将无条件过滤掉所有 HUB 和带有子类 BOOT 的 HID。这可能是您在执行操作时看不到 HID 设备的原因getDeviceList()

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

于 2017-03-27T21:52:05.123 回答
-2

我已成功地将我的 Arduino Uno 连接到我的三星 Galaxy Tab 10 P7500。如果连接有问题,那是因为平板电脑拒绝了没有外接电源的 USB 设备的权限。尝试使用 5 或 3.3 伏 AC/DC 适配器从外部为您的设备供电,第一次,如果您发现您的设备已连接并触发意图,请拔下电源适配器,您的设备将在没有外部电源的情况下运行,平板电脑本身会通过 USB OTG 供电

于 2014-12-16T04:11:00.233 回答