【问题标题】:Intent Filter not calling onReceive for USB_ACCESSORY_ATTACHED意图过滤器没有为 USB_ACCESSORY_ATTACHED 调用 onReceive
【发布时间】:2013-11-05 02:47:13
【问题描述】:

我在MyDialogFragment 的构造函数中为USB_ACCESSORY_ATTACHED 声明了一个意图过滤器,并在片段的onResumeonPause 方法中注册/取消注册它。 MyReceiver 在内部类中扩展 BroadcastReceiver 以接收 USB_ACCESSORY_ATTACHED 意图。见以下代码:

public class MyDialogFragment extends DialogFragment {

     private Context context;
     private IntentFilter usbIntentFilter;
     private MyReceiver myReceiver;

     MyDialogFragment(Context context) {
        usbIntentFilter = new IntentFilter(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
        myReceiver = new myReceiver();
        this.context = context;
     }


     @Override
     public void onResume() {
          super.onResume();

          // Register broadcast receiver
         context.registerReceiver(myReceiver, usbIntentFilter);
     }

     @Override
     public void onPause() {
          super.onPause();

          // Unregister broadcast receiver
          context.unregisterReceiver(myReceiver);
     }

     class MyReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            Log.d("MyApp","Called USB receiver");

        }
     }
}

但是,当我连接 USB 附件时,MyReceiveronReceive 方法永远不会被调用。此外,当我将意图更改为

usbIntentFilter = new IntentFilter(UsbManager.ACTION_USB_ACCESSORY_DETACHED);

MyReceiveronReceive 方法确实被调用了。所以我的问题是:为什么当我拆下配件时它可以工作,而当我连接配件时却不行?

【问题讨论】:

  • 您是否在 AndroidManifest.xml 中包含了所需的权限?
  • 我有<uses-feature android:name="android.hardware.usb.accessory" />。但这不是权限。我也需要这些吗?
  • 谢谢。但我相信详细说明如何设置清单,以便在连接设备时提示用户打开应用程序。当应用程序已经运行时,我只想听听何时连接了任何 USB 设备。因此,据我了解,由于我使用 context.registerReceiver 注册接收器,我应该只在清单中要求 <uses-feature android:name="android.hardware.usb.accessory"/>
  • 看起来其他人找到了类似的东西groups.google.com/forum/#!topic/android-developers/_h5giLPFir0 我收到广播是为了断开 USB,但不是因为连接它,这似乎很奇怪。这要么是有原因的,要么是一个错误。

标签: android android-intent usb


【解决方案1】:

因此,USB_ACESSORY_ATTACHED 意图似乎从未真正进入活动,请参阅 SO 问题:

Android 3.1 USB-Host - BroadcastReceiver does not receive USB_DEVICE_ATTACHED

您必须使用由USB_ACCESSORY_ATTACHED 间接调用的onResume 方法。我不得不说,这在 Android 文档中并不清楚,我质疑它的实现。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多