LoginSignup
14
15

More than 5 years have passed since last update.

ウィジェットからActivityを起動した場合にActivityスタックをクリアしたい

Last updated at Posted at 2015-04-16

1 前提

Activity A, B...などがアプリに存在。
WidgetタップでActivity Wを起動。

2 やりたいこと

A→ホームボタン→ウィジェットタップ→W→戻るボタン→ホーム画面

3 最初の設定

appWidgetProvider.java(NGver.)
Intent intent = new Intent(context, ActicityW.class);
PendingIntent pi = new PendingIntent(...);

4 その時の挙動

A→ホームボタン→ウィジェットタップ→W→戻るボタン→A

まあ、ある意味当然。

5 Activity W起動用のIntentのフラグをいろいろいじった

appWidgetProvider.java(OKver.)
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 別バージョン

appWidgetProvider.java(OKver.2)
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を採用することにした。

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15