android - 我在此意向注册中缺少什么?

标签 android usb

我在 ICS 中,正在尝试连接一个接收器,当 USB 设备和/或附件插入/拔出平板电脑时,该接收器将被调用。

根据文档和其他 Stack 问题,*看起来我只需要下面的代码,但是当我运行这段代码时没有任何反应......很难说,因为我的设备插入了 USB 配件进/出它,所以我的调试只是我将东西写入文件,而不是实际调试,但它*似乎根本没有做任何事情。

  IntentFilter attachFilter = new IntentFilter();
  attachFilter.addAction(ACTION_USB_PERMISSION);
  attachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);     
  registerReceiver(mAttachReceiver, attachFilter);

  IntentFilter detachFilter = new IntentFilter();
  detachFilter.addAction(ACTION_USB_PERMISSION);
  detachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
  registerReceiver(mDetachedReceiver, detachFilter);

接收器看起来像这样(为简洁起见,我已将它们缩减,但它们是有效的接收器)...

private final BroadcastReceiver mAttachReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        logMsg("ACTION = " + action);
        ... }

我的 list 包含这个条目:

<uses-feature android:name="android.hardware.usb.host" />

有什么我想念的吗?我试过 ACTION_USB_DEVICE_ATTACHED 而不是 ACCESSORY 但这似乎没有产生任何不同的结果。此外,一旦连接,我就可以在应用程序中与设备对话,因此,它正在被识别,并且从连接的设备(它是 NFC 读卡器)发送/接收消息的后续代码按预期工作。唯一持续失败的是初始电缆连接的通知。

TIA

最佳答案

ACTION_USB_DEVICE_ATTACHED 只能是 Activity 而不是 BroadCastReciever 的 Intent 过滤器。

UsbManager 仅解析 Activity (既不是服务也不是 BroadcastReciever)并启动它们。

所以你没有收到任何广播。

编辑: Android Developer 网站确实说它是广播,但 Android Source 只是解析 Activity 。 虽然您可以使用 ACTION_USB_ACCESSORY_DETACHED 在接收器中分离更新

编辑2: 就 Receiver 而言,您的代码没有任何问题。由于广播 USB_ACCESSORY_ATTACHED 的方式,您的代码无法正常工作。 USB_ACCESSORY_ATTACHED 不是真正意义上的广播,Android Frameworks 仅启动 Activity Intent ,因此您不会在广播接收器中接收 Intent 。

您只能将 Activity 用于 ATTACHED Intent 而不能用于接收器

<activity android:name=".YourActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
    </intent-filter>

    <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
               android:resource="@xml/accessory_filter" />
</activity>

关于android - 我在此意向注册中缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738766/

相关文章:

java - 安卓 USB 转 Java (PC)

swift - Swift 上的 USB 连接委托(delegate)

python - 在 raspbian soft-float 上使用来自 Raspberry Pi 的 Python 的 FTDI D2XX 驱动程序

android - Qt/Android/CMake : Custom AndroidManifest. xml 未考虑在内

java - Try-with-resources api pre 19

android - Android ListView 中的按钮不响应点击

c# - 如何在 C# 中知道 PID 和 VID 来发现虚拟 COM 端口名称

java - 以正确的顺序从 Web 服务迭代 Json 数据

session 类上的 java.lang.NullPointerException

usb - 简单的操纵杆隐藏报告描述符不起作用