私たちのアクティビティは、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" >