Android -launchMode = singletaskと通知?
-
27-10-2019 - |
質問
私がこれから尋ねようとしていることについていくつかの投稿があることを知っていますが、正しい答えで見つけることができません。
私の理解から、メインアクティビティの(aと呼びましょう)発射モードがsingletaskに設定され、AがアクティビティBを開始した場合、ホームボタンをクリックすると履歴スタックが破壊され、アプリケーションが再起動すると、そしてBではありません。
永続的な通知があり、ユーザーが通知をクリックするたびに表示されるメインアクティビティの複数のインスタンスが表示されたくないため、Singletaskに起動モードセットがあります。
私が両方に応えることを可能にする私が欠けているものはありますか?
だから、通知からアプリを起動したいときはいつでも、彼を最後の(現在の)アクティビティに戻すようにすることを保証できる方法があるかどうかを尋ねています。
LaunchModeをSingletopに変更すると機能しますが、起動するたびにメインアクティビティの複数のインスタンスが表示されます。
ありがとう
アンドレアス
解決
LaunchModeをSingletopに設定して、アプリ内のすべてのアクティビティに設定してみましたか?私があなたのクエリから得たのは、メインアクティビティがSingletopではないため、メインアクティビティが通知アクティビティから開始されたアクティビティから発売されると、メインアクティビティの別のインスタンスにつながる可能性があるためです。
または、MANIFESTのアプリケーションタグ自体の属性として起動モードを指定することもできます。
他のヒント
次のコードを使用して、アクティビティの複数のインスタンスを回避します
Intent intent=new Intent(this,RICO.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
マニフェストを変えることは私には適切ではありません
私は両方の承認に問題があります。通知は、この条件でのみ完璧に機能します: - メインアクティビティのバックボタンを使用(そのアクティビティのみを含む履歴を使用) - ホームボタンを使用しない - 呼び出しているアクティビティが上にありアクティブである場合、通知を使用しない
他のいずれの場合でも、通知は「新しい意図(...)」を使用してアクティビティを前景に呼び出すことはできません。
私が必要なものを手に入れるためのマニフェストオプションと意図のフラグの錬金術的な組み合わせを見つけました。
Intent intent= new Intent(this, YaampActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
これらのオプションを使用します
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true"
要素の内側。
これで、主要なアクティビティを生成する通知(そのアクティビティがまだ前景にない場合)があり、ホームボタンや背面のボタンを押してアクティビティが「閉じている」場合でも、その動作が正しいです。