3

我在Android上遇到了一点痛苦。我有两个活动,一个是启动屏幕,当您单击应用程序图标时启动,另一个可以在发生特定事件时唤醒(NFC 事件,但这不是问题)。

清单中有声明:

<activity android:label="@string/general.appName"    android:name=".activity.SplashActivity" android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
<activity android:excludeFromRecents="true" android:label="@string/general.appName" android:name=".EventReceiver" android:noHistory="true" android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.nfc.action.TRANSACTION_DETECTED">
            </action>

            <category android:name="android.intent.category.DEFAULT">
            </category>

            <data android:host="secure" android:path="/aXXXXX" android:port="0" android:scheme="nfc"/>
        </intent-filter>
    </activity>

一切正常,这意味着 EventReceiver 在收到特定事件时启动,启动画面正常运行等......但是,当应用程序由事件启动时,首先启动的是 EventReceiver。如果我通过单击手机的主页按钮暂停应用程序,然后再次长按它,它会出现多任务表,其中包含所有最近打开的应用程序。在那里,如果我单击我的应用程序,它会在 EventReceiver 上恢复应用程序,就像发生事件一样。那么您知道一种仅在一个选定活动上恢复应用程序的方法(在我的例子中是 SplashScreen)。或者你知道一种方法来识别应用程序是由多任务功能恢复的吗?(如果我得到这个信息,我也可以在我的 EventReceiver 的 onCreate 上打开好的活动)。

目前,我找到的唯一解决方案是在我的 EventReceiver 活动上放置一个 android:excludeFromRecents="true" 标志。如果应用程序是由事件启动的,这将导致应用程序不会出现在多任务表中。但这有点棘手,我不太喜欢。

你有什么想法 ?

非常感谢您的回答!(对不起我的学者英语^^)

4

2 回答 2

2

如果您真的必须检测应用程序何时从“最近”启动,您可以使用意图标志。

 if (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) {
     // Lauched from recent apps.
}
于 2012-06-22T08:52:27.300 回答
0

不要使用闪屏。它只会减慢您的应用体验,并且没有任何价值。

此外... Android 应用程序是一组丢失的活动... 没有需要启动屏幕的具体入口点。

也就是说......应用程序切换器会将您返回到以前的活动活动。在您的情况下,.EventReceiver。您可以通过使用显示您的 ui 的第二个活动来更改您的结构,以便 EventReceiver 允许您转发。

如果我弄错了,请纠正我......但是你不能用接收器拦截 nfc 事件吗?从那里你应该打开你的 ui 活动。

于 2012-06-22T08:32:04.247 回答