【发布时间】:2013-11-05 02:47:13
【问题描述】:
我在MyDialogFragment 的构造函数中为USB_ACCESSORY_ATTACHED 声明了一个意图过滤器,并在片段的onResume 和onPause 方法中注册/取消注册它。 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 附件时,MyReceiver 的 onReceive 方法永远不会被调用。此外,当我将意图更改为
usbIntentFilter = new IntentFilter(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
MyReceiver 的 onReceive 方法确实被调用了。所以我的问题是:为什么当我拆下配件时它可以工作,而当我连接配件时却不行?
【问题讨论】:
-
您是否在 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