【发布时间】:2011-10-22 08:14:21
【问题描述】:
我通过the description and samples for USB host at developer.android.com 检测连接和分离的 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
设备:Acer Iconia Tab A500
安卓:3.1
提前致谢
【问题讨论】: