繁体   English   中英

如果已在运行应用程序,则在连接了USB附件时如何接收Intent

[英]How to receive Intent when USB Accessory is attached if application is already running

我可以在这里阅读有关如何在连接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>

但是,在连接附件时,如果我的“活动”已经在运行,我会遇到问题。 在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的合适方法是什么? 我需要在活动本身中实现一个单独的侦听器吗?

如果查看onNewIntent()的文档,则内容为:

onNewIntent(Intent intent)上受保护的void

在API级别1中添加
对于在其程序包中将launchMode设置为“ singleTop”的活动,或者在客户端调用startActivity(Intent)时使用FLAG_ACTIVITY_SINGLE_TOP标志的活动,将调用此方法。 在这两种情况下,当在活动堆栈的顶部重新启动活动而不是启动活动的新实例时,将使用已用于重新启动的Intent在现有实例上调用onNewIntent()它。
...

因此,您需要在清单singleTop ActivitylaunchMode设置为launchMode ,否则将不会收到对onNewIntent()调用。 结果应如下所示:

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop"
        android:exported="true">
           ... 
</activity>

如果您考虑一下,行为实际上很有意义。 下次在问这里之前,请先阅读文档。 如果您不知道,不要假设东西是如何工作的。

编写一个BroadcastReceiver并通过Context.registerReceiver(...)在您的活动生命周期方法中注册它。 不要忘记在相应的拆卸生命周期方法中注销它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM