安卓 3.1 USB 主机 - 广播接收机未收到USB_DEVICE_ATTACHED
我研究了 developer.android.com USB主机的描述和示例,以检测连接和分离的USB设备。
如果我在附加设备时使用清单文件中的意向过滤器来启动我的应用程序,它工作得很好:插入,设备被检测到,android请求启动应用程序的权限,设备信息显示在表中。
我正在开发的应用程序不应该只有在设备附加/分离时才启动/完成(例如,数据管理目的)。另外,如果应用程序已经在运行,我不希望弹出打开对话框。因此,我决定在设备连接时不直接启动活动,而是注册一个 BroadcastReceiver,如果设备处于打开状态/分离状态,它应该(稍后)通知该活动。此接收器可以很好地识别分离操作,但不能识别连接操作。
我是否缺少权限或数据属性或类似内容?本教程和示例没有说明其他必要的属性。
下面是清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="de.visira.smartfdr"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<uses-feature android:name="android.hardware.usb.host" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".usb.Detector">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
android:resource="@xml/device_filter" />
</receiver>
</application>
接收器:
public class FDRDetector extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, "Action: " + action, 3).show();
// pops up only if action == DETACHED
}
我不明白为什么相同的意图过滤器有效,如果我在活动上使用它们,但如果它们应用于接收器,则不然?即使我在代码中设置接收器和过滤器,也无法识别附加。
我的工作环境:IDE:带有Android插件的Eclipse 3.7
设备: 宏碁图标选项卡 A500
安卓: 3.1
提前致谢