3

私たちのアクティビティは、GCM 通知から開始できます。GCM インテントにエクストラを設定して、ユーザーがその GCM 通知のメッセージ スレッドに確実に移動できるようにし、removeExtra後でそれを呼び出してインテントから削除します。

ユーザーが最近の履歴メニューからアプリを起動すると、前回の起動 (GCM 通知など) と同じ目的でアクティビティが開始されます。

このシナリオは非常に簡単に検出できます。

    Intent i = getIntent();

    // If the caller intent is from the recent apps and has the RECIPIENT_ID_KEY
    // extra we should remove it to avoid open the messages thread again
    if (((i.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) &&
             i.hasExtra(MyConstants.RECIPIENT_ID_KEY)) {
        i.removeExtra(MyConstants.RECIPIENT_ID_KEY);
    }

ただし、アクティビティが OS によって破棄された場合にも、これが機能するようにしたいと考えています。現時点では、開発者向けオプション「アクティビティを保持しない」が設定されている場合 (OS 4.0 以降でのみ使用可能)、別の画面から [戻る] ボタンを押すと、同じ意図でアクティビティが再作成され続け、結果として問題が発生します。起こっていること。

GCM インテントに独自のエクストラを追加し、それを処理したら共有設定に保存することを検討しました。SEND image/jpgただし、インテントを介してアプリに画像を共有するときにも、これが機能する必要があります。その意図を制御することはできません。ファイル/URI 情報を使用できると思いますが、これは、ユーザーが同じ画像を 2 回続けて共有した場合、2 番目の画像を無視することを意味します。

この問題を解決するクリーンで簡単な方法はありますか?

現在、OS 2.3+ をサポートしており、アプリケーションは世界中で利用できます。私の AndroidManifest.xml の関連セクションは次のとおりです。

    <activity
        android:name=".ui.MyClass"
        android:configChanges="orientation|screenSize"
        android:launchMode="singleTop"
        android:windowSoftInputMode="stateHidden" >
4

1 に答える 1