3

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"フラグを設定することです。これにより、アプリケーションがイベントによって起動された場合、アプリケーションはマルチタスクテーブルに表示されなくなります。しかし、これは少しトリッキーで、私はそれがあまり好きではありません。

あなたはなにか考えはありますか ?

よろしくお願いします!(そして私の学者の英語でごめんなさい^^)

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を表示する2番目のアクティビティを使用して構造を変更し、EventReceiverでそのUIに転送できるようにすることができます。

私が間違っている場合は訂正してください...しかし、レシーバーでnfcイベントをインターセプトできませんか?そこから、UIアクティビティを開く必要があります。

于 2012-06-22T08:32:04.247 に答える