Androidで少し痛みがあります。2つのアクティビティがあります。1つはアプリアイコンをクリックすると起動するスプラッシュ画面で、もう1つは特定のイベント(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でアプリケーションが再開されます。したがって、選択した1つのアクティビティ(私の場合はSplashScreen)でのみアプリケーションを再開する方法を知っていますか。または、アプリケーションがマルチタスク機能によって再開されたことを認識する方法を知っていますか?(この情報を取得すれば、EventReceiverのonCreateでも適切なアクティビティを開くことができます)。
今のところ、私が見つけた唯一の解決策は、EventReceiverアクティビティにandroid:excludeFromRecents="true"フラグを設定することです。これにより、アプリケーションがイベントによって起動された場合、アプリケーションはマルチタスクテーブルに表示されなくなります。しかし、これは少しトリッキーで、私はそれがあまり好きではありません。
あなたはなにか考えはありますか ?
よろしくお願いします!(そして私の学者の英語でごめんなさい^^)