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 件のコメント:
コメントを投稿