#1 前提
Activity A, B...などがアプリに存在。
WidgetタップでActivity Wを起動。
#2 やりたいこと
A→ホームボタン→ウィジェットタップ→W→戻るボタン→ホーム画面
#3 最初の設定
Intent intent = new Intent(context, ActicityW.class);
PendingIntent pi = new PendingIntent(...);
#4 その時の挙動
A→ホームボタン→ウィジェットタップ→W→戻るボタン→A
まあ、ある意味当然。
#5 Activity W起動用のIntentのフラグをいろいろいじった
Intent intent = new Intent(context, ActicityW.class);
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK|intent.FLAG_ACTIVITY_MULTIPLE_TASK);
(1)A→ホームボタン→ウィジェットタップ→W→戻るボタン→ホーム画面
(2)A→B→ホームボタン→ウィジェットタップ→W→戻るボタン→ホーム画面
でけた!
(2)のあと、アプリアイコンをタップすると、Bが起動されたので、元のActivityスタックに戻れる。
ちなみに、Wからホームボタンをタップすると、以下のようになった。
(3)A→B→ホームボタン→ウィジェットタップ→W→ホームボタン→ホーム画面
→アプリアイコンタップ→W
ふむふむ。
さらにそこから戻るボタンを押すと、ホーム画面に戻った。
んでアプリアイコンタップすると、Bが起動。
ちょっとこの辺は仕様によりそう。
#6 別バージョン
Intent intent = new Intent(context, ActicityW.class);
intent.setFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
FLAG_ACTIVITY_CLEAR_TASKは、API11以降で追加された模様。
これで起動したところ、Activityスタックが削除されてるような挙動。
これでいいじゃん??
これだと、最初に起動していたActivity AやBには、Wを起動した後には戻れず、アプリアイコンタップ時は必ず起動画面が表示される。
こっちのほうがシンプルかな?
履歴にWが残り続けるのがどうかなというところか・・・
#7 結論
A→D→ホームボタン→W→B→C
こんな感じでウロウロした後、戻るボタンで全部戻って、アプリアイコンをタップしたとき、5の方法だといきなりDが表示されると混乱するかもしれない。
なので、今回は6を採用することにした。