http://baroqueworksdevjp.blogspot.jp/2012/08/applicationonterminate.html
では、他に何かいい方法がないか調べてみました。
ActivityManagerの公開APIを使う
以下のような、Task情報を取得できるAPIをActivityのonStop()でコールしてみました。private void checkRecentTasks(){ Log.e("","checkRecentTasks"); ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List<RecentTaskInfo> taskInfo = am.getRecentTasks(10, ActivityManager.RECENT_WITH_EXCLUDED); for( RecentTaskInfo info : taskInfo){ Log.e("", "" + info.baseIntent.getComponent().getPackageName()); } } private void checkRunningTasks(){ Log.e("","checkRunningTasks"); ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> taskInfo = am.getRunningTasks(10); for( RunningTaskInfo info : taskInfo){ Log.e("","" + info.topActivity.getPackageName()); } }
Homeキー押下によりSampleアプリをBackGroudにさせたlogです。
checkRecentTasks
08-27 21:12:13.314: E/(7511): com.android.launcher 08-27 21:12:13.314: E/(7511): jp.baroqueworksdev.sampleapp 08-27 21:12:13.314: E/(7511): com.android.packageinstaller 08-27 21:12:13.314: E/(7511): jp.r246.twicca 08-27 21:12:13.314: E/(7511): com.alphonso.pulse 08-27 21:12:13.314: E/(7511): com.chnavi.android2ch 08-27 21:12:13.314: E/(7511): jp.mixi 08-27 21:12:13.314: E/(7511): com.facebook.katana 08-27 21:12:13.314: E/(7511): com.android.chrome
checkRunningTasks
08-27 21:12:13.321: E/(7511): com.android.launcher 08-27 21:12:13.321: E/(7511): jp.baroqueworksdev.sampleapp 08-27 21:12:13.321: E/(7511): jp.r246.twicca 08-27 21:12:13.321: E/(7511): com.alphonso.pulse 08-27 21:12:13.321: E/(7511): com.chnavi.android2ch 08-27 21:12:13.321: E/(7511): jp.mixi 08-27 21:12:13.321: E/(7511): com.facebook.katana 08-27 21:12:13.321: E/(7511): com.android.chrome
直近に起動したアプリ順に並んでいました。
Android Developer Siteにも以下のように書いています。
with the most recent being first and older ones after in order.
上記のようなTaskリストを取得して、自アプリがTOPかどうかチェックするのも一つの手段かと思います。.
ただし、ロック画面が表示されている場合、TOPにいても「画面上表示されておらずユーザーには見えない」ことを忘れずに。
0 件のコメント:
コメントを投稿