我在developer.android.com上完成了USB主机的描述和示例,以检测连接和分离的USB设备.
如果我在清单文件中使用intent-filter在连接设备时启动我的应用程序,它可以正常工作:插入,设备被检测到,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>
Run Code Online (Sandbox Code Playgroud)
和接收器:
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
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么相同的intent-filter工作,如果我在一个活动上使用它们,但是如果它们应用于接收器则不行?即使我在代码中设置了接收器和过滤器,也无法识别附件. …