在我的Android项目中,我需要在检测到具有特定Vendorid和Productid的USB设备时自动打开应用程序。在我连接USB设备时第一次正常工作。但是,当我拔下并再次插入时,应用程序没有重新启动。我不知道是什么问题。我的清单代码是
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
</activity>
答案 0 :(得分:0)
Android具有USB附件API (android.hardware.usb),您可以在其中将任何USB设备与android设备连接或分离并添加
进行显示,并将此意图过滤器过滤为
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
清单中的活动
UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
由此您可以获取USB的系统服务
UsbAccessory[] accessories = mUsbManager.getAccessoryList();
您将获得当前连接的USB附件的列表。它会报告其制造商和型号名称,配件的版本以及该设备的用户可见的配件说明。
HashMap<String,UsbDevice> result= mUsbManager.getDeviceList()
返回一个HashMap,其中包含当前连接的所有USB设备。 USB设备名称是返回的HashMap的密钥。 UsbDevice包含制造商和型号名称,版本等。
将广播接收器添加到活动中。该接收器监视用户授予使用附件的权限的事件。如果用户选中了始终允许,则将在附件之后生成该消息,而无需进一步的用户交互。
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
registerReceiver(mUsbReceiver, filter);
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
openAccessory(accessory);
} else {
Log.d(TAG, "permission denied for accessory "+ accessory);
}
mPermissionRequestPending = false;
}
} else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
if (accessory != null && accessory.equals(mAccessory)) {
closeAccessory();
}
}
}
};
有关详细说明,请阅读Android Developer