我通过the description and samples for USB host at developer.android.com工作来检测连接和分离的USB设备。Android 3.1 USB主机 - BroadcastReceiver未收到USB_DEVICE_ATTACHED
如果我在清单文件中使用意图过滤器来启动我的应用程序,当一个设备连接时,它工作得很好:插入,检测到设备,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:Eclipse的3.7与Android插件
设备:宏碁ICONIA TAB A500
安卓3.1
在此先感谢
尝试覆盖onNewIntent() - 当您使用android:launchMode =“singleTop”时它会被调用,并可能很好地解决您的情况。之后总是调用onResume()。 – Gusdor
你能解释一下你的第一段“它的要点”吗?它看起来很困惑。 –
谢谢,我一直在想同样的事情。很高兴知道这是不起作用的。闻起来像一个Android的bug对我来说。 – Brian