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

标签 android usb host galaxy-tab

我正在尝试利用 Samsung 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 设备,通过注册广播接收器来监听 Intent

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);

当我附加任何设备时,这并没有触发任何 Intent ,奇怪......好吧。所以我继续尝试下一个方法:通过 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 示例(这正是我本质上所拥有的,我撕掉了他们的示例)并且遇到了这些问题。

我还应该提到我的 list 的构成:

<?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 firing ) HID 设备、arduino 设备……遗憾的是……我的 USB 设备似乎没有触发 Intent 或被 USB 集线器枚举。我尝试使用 USB 闪存驱动器,它 DID 枚举它并工作......但是它显示为列表中的第二个设备,第一个是上面列出的永远存在的 usbDevice。不过, Intent 确实会激发它。

有没有人知道使用 HID 设备和其他 USB 设备触发 intent 的解决方法,除了少数几个 android 现在似乎在做?

最佳答案

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

关于三星 Galaxy 10.1 平板电脑的安卓 USB 主机问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7534878/

相关文章:

c# - 检测 USB 设备连接到哪个串行端口 (COM)

C# COM 端口通信 - USB 转串行适配器出现错误

android - 使用USB将摄像头连接到Android的外部网络摄像头

java - 如何使用 Undertow 服务器在 IIS 上托管 Spring Boot 可执行 jar 文件?

android - 如何在Flutter中制作方形凸起按钮?

android - 是否可以在网络上运行 eclipse IDE,以便其他用户可以与您一起工作?喜欢谷歌文档?

asp.net - 我可以在 Linux 服务器上托管 asp.net 网站吗?

php - Amazon S3/EC2-PHP和MySQL?

android - Flutter无法合并dex

android - 为什么 BufferedInputStream.read() 在 Android Nougat 用于返回 0 时返回 -1?