ホーム画面に戻る前に表示していた画面を表示するには

2,852 views
Skip to first unread message

つづき

unread,
Jan 28, 2011, 8:34:08 AM1/28/11
to 日本Androidの会
つづきと申します。
件名がわかりずらく申し訳ございません。
適当なタイトルが思いつきませんでした。



★やりたいことは次の二つです。
(1)システム起動時にアプリを自動起動したい(ログイン画面への遷移)
   →これはできています。

(2)ログイン後のメニュー画面から、ホームキーでホーム画面に戻っても、
   アプリを起動したらメニュー画面に戻って欲しい。

★やったこと
 ●BroadcastReceiverを継承したReceiverクラスで、アプリを自動起動しました。
 @Override
 public void onReceive(Context context, Intent intent) {

   // 新しくアプリを起動
   Intent intent = new Intent(context, LoginActivity.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 【※1】
   context.startActivity(intent);
 }

 ●マニフェスト
   *ログイン画面
   <activity android:name=".LoginActivity" android:label="@string/
app_name">
    <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
   </activity>

   *メニュー
   <activity android:name=".MainMenuActivity" /> 【2】

★できないこと
1.(1)で起動したログイン画面から、メニュー画面へ遷移します。
2.ホームキーでホーム画面に戻ります。
3.ランチャーからアプリを起動します。←ここでメニュー画面に戻って欲しいのに、
 ログイン画面になってしまう。

★試したこと
 1.アプリの自動起動を行わず、ランチャーから起動した場合は、希望する↓の画面遷移ができます。
   「ログイン画面→メニュー画面→ホームキーでホーム画面→アプリ起動→メニュー画面」
   ここで、アプリの自動起動が原因と推測。

 2. 【※1】intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); のフラグがNEW_TASKなの
で、
    他のフラグを試したがすべてエラー。
 3. 【※2】メニュー画面の複数インスタンスが生成されたのかと思い、マニフェストを編集。
     android:launchMode="singleTop"、"singleInstance"を試すが変わらず。


スタックの考え型からすれば、ホーム画面に戻る前はメニュー画面なので、
「アプリを起動したらメニュー画面が表示されるはず」と思っているのですが、
どこを見落としているのでしょうか。

ご指摘頂ければ幸いです。

過去の投稿も参考にしたのですが、アプリの自動起動についての記事しか見つけられませんでした。
※当ディスカッション内の記事のよい検索方法がありましたら教えてください。

Yasuharu Kasai

unread,
Jan 28, 2011, 9:29:01 AM1/28/11
to android-g...@googlegroups.com
つづきさん、

パンテオン・モバイル・システムズの笠井と申します。

何日か前にも同じ件で投稿しましたのですが、以下のコードを試してみてください。
私が作成したホームアプリでのアプリケーション起動部分の抜粋です。


# ただし、起動「される」側のアプリのActivityのlaunchModeに影響を受けます。
# (singleInstanceになっていると遷移先のActivityではなく、singleInstanceに
# 設定されているActivityが表示されてしまう、など)
# また、これを実装していないランチャーアプリから起動された場合はうまくいきません。
# Androidの標準ホームアプリだとうまくいきます。

---- ここから ----

intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

intent.setClassName(AppPackageName, AppActivityName);

intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(intent);

---- ここまで ----

これをつづきさんのアプリに当てはめると、

// 新しくアプリを起動
Intent intent = new Intent(context, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 【※1】
context.startActivity(intent);

↓↓↓↓↓↓↓

// 新しくアプリを起動
Intent intent = new Intent(context, LoginActivity.class);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setAction((Intent.ACTION_MAIN);
intent.setFlags(
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

となります。

以上です。

---------------------------------
パンテオン・モバイル・システムズ株式会社
笠井

2011年1月28日22:34 つづき <bigtsu...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


つづき

unread,
Jan 29, 2011, 3:29:28 AM1/29/11
to 日本Androidの会
笠井様

はじめまして、つづきです。
さっそくご返信頂きましてありがとうございます。
無事、解決しました。

通常、ホーム画面やランチャー画面からアプリを起動する時に読み込まれるマニフェストの情報を、
Receiverから起動する時も同じように、アクションとカテゴリをセットしてあげるのですね。

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED について調べてみました。

「スタックを全てクリアして、新しくActivityを生成させる」
ということで、アプリ起動時はスタックがない状態だと思いましたので、
Intent.FLAG_ACTIVITY_NEW_TASKのみを指定して実行したところ、結果は同じ動作になりました。

また数日前に同じ投稿をされたとのこと、投稿前に少しは遡って探してみたのですが
見つけられませんでした。
上手に検索できるようになりたいものです。

今回はどうもありがとうございました。
> 2011年1月28日22:34 つづき <bigtsuzuki...@gmail.com>:
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
Reply all
Reply to author
Forward
0 new messages