我可以在这里阅读有关如何在连接 USB 附件时启动我的应用程序的信息,并且一切正常:我的清单中内置了一个 IntentFilter,每次连接指定的附件时都会启动适当的活动。看起来是这样的:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
但是,如果在连接附件时我的 Activity 已经在运行,我会遇到问题。在 MainActivity 中,我在两个地方查找 USB_ACCESSORY_ATTACHED Intent:onCreate 和 onNewIntent,如下所示:
protected void onCreate(Bundle savedInstanceState) {
//Check for some other actions first
if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(intent.getAction()))
usbAttached(intent);
}
protected void onNewIntent(Intent intent) {
if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(intent.getAction()))
usbAttached(intent);
}
但是,如果 MainActivity 已经在运行,则在插入附件时不会调用 onCreate 和 onNewIntent。在这种情况下,我需要在插入配件之前关闭我的应用程序,这对用户来说会很麻烦。如果我的活动已经在运行,那么从我的 USB 配件接收 Intent 的适当方式是什么?我需要在活动本身内实现一个单独的侦听器吗?