ホームキーによるホームアプリの切替えについて

1,263 views
Skip to first unread message

ss.ももんが

unread,
Aug 10, 2011, 9:18:10 AM8/10/11
to 日本Androidの会
ssももんがと申します。

現在、ホームアプリを開発しており、その中で解決できない問題がありますので相談させてください。

開発しているホームアプリは純粋なホームアプリではなく、ランチャーアプリとしての側面が強いです。
あくまで他のホームアプリ(標準ホームやLauncher Proなど)と併用することを前提に作成しています。
(以下、私が開発しているホームアプリを「開発ホーム「、併用するホームアプリを「併用ホーム」と呼びます)

そのため、ホームキーを押すごとに開発ホーム→併用ホーム→開発ホーム→併用ホーム…と切替えられるようにしたいと考えています。
要はpreHomeやTaskSwitcherのようなことをしたいです。


開発ホームのonResumeにReceiverを張って、IntentFilterにIntent.ACTION_CLOSE_SYSTEM_DIALOGSを設定する事で、ホームキーが押された事を検知できることは分かりました。
このReceiverで併用ホームを起動すれば良いのですが、「ホームキー押下による開発ホームのintent」と「Receiverによる併用ホームのintent」がほぼ同時に動いてしまい、タイミングによって後から動いたintentが全面に出るようになってしまいます。
(ホームキー→Receiverで動くと望み通り併用ホームが前面に出る、Receiver→ホームキーで動くと開発ホームが前面に出てしまう)

また、「ホームキー押下による開発ホームのintent」が先にきた場合、開発ホームのonResumeなどは呼ばれないようです。


このintentの順序をうまく制御する方法はあるでしょうか?
最終目的は交互にホームを前面に出す事なので、順序を制御する以外の方法でも構いませんし、Receiverによる方法でなくても構いません。

何か良い方法をご存知の方、ご助言のほどよろしくお願いいたします。


該当部分のサンプルソースを記載します。


private static Receiver receiver;

@Override
public void onResume() {
 super.onResume();

 IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

 registerReceiver(receiver, filter);
}

@Override
public void onPause() {
 super.onPause();
 unregisterReceiver(receiver);
}

private class Receiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  Intent i = new Intent();
  /* intent作成 */
  startActivity(i);
 }

}





"ss.ももんが"

unread,
Aug 10, 2011, 9:37:59 AM8/10/11
to 日本Androidの会
メールがエラーになってしまったようなので再送します。
複数届いているようでしたらごめんなさい。

--------------------------------------------

bina

unread,
Aug 11, 2011, 2:07:28 AM8/11/11
to 日本Androidの会
ssももんがさん

はじめまして。binaといいます。
開発ホームが前面に出ているときにはActivityを起動しなければいいと思います。

ActivityManager am =
(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> runTask = am.getRunningTasks(5);
String topActivityPkg = runTask.get(0).topActivity.getPackageName();

これにより、最前面に出ているActivityを判断できるかと思います。
topActivityPkgが開発ホームであればstartActivityを実行しない、
開発ホーム以外であればstartActivityを実行する、
とすればいいのではないでしょうか?

確認はしていないので、間違っていてたらすみません。

"ss.ももんが"

unread,
Aug 14, 2011, 11:34:53 AM8/14/11
to android-g...@googlegroups.com
binaさん

回答ありがとうございます。
また、返事が遅くなり申し訳ありません。

いただいたアドバイスで試してみたのですが、startActivityを行う時は必ず開発ホームがtopActivityになるので、
この方法だと必ずstartActivityが呼出されなくなってしまいます。
ただ、使い方によってはうまく使えそうな気もしますので、いくつか試してみます。

他にも何かアドバイスがありましたらよろしくお願いします。

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

Reply all
Reply to author
Forward
0 new messages