2013-07-29 1 views
-1

Когда я долгое время нажимаю кнопку «домой» на своем телефоне, я вижу список действий, которые я недавно запустил. Когда я запускаю другое действие, Android кэширует/приостанавливает старую активность.Как я могу получить список приостановленных/кэшированных acitvities, которые я вижу, когда кнопка home нажата?

Я хотел бы получить список недавно запущенных мероприятий, но я не могу понять, как это сделать. Я порылся StackOverflow и SDK документации ActivityManager Android и придумали с этими двумя отрывками:

ActivityManager mgrActivity = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 

System.out.println("getRunningTasks: " + mgrActivity.getRunningTasks(Integer.MAX_VALUE).size()); 
System.out.println("getRecentTasks: " + mgrActivity.getRecentTasks(Integer.MAX_VALUE, ActivityManager.RECENT_WITH_EXCLUDED).size()); 

Ни один из них показал мне правильное количество действий, которые я недавно запущенных. Оба этих вызова возвращают большие значения, чем количество отображаемых действий, когда я долгое время нажимаю кнопку «домой». Может ли кто-нибудь указать, что я делаю неправильно?


Я попытался это, чтобы получить имя в Активности:

ActivityManager mgrActivity = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 

for (RunningTaskInfo run : mgrActivity.getRunningTasks(Integer.MAX_VALUE)) { 
    System.out.println(run.topActivity.getPackageName()); 
} 

for (RecentTaskInfo run : mgrActivity.getRecentTasks(Integer.MAX_VALUE, ActivityManager.RECENT_IGNORE_UNAVAILABLE)) { 
    if (run.origActivity != null) { 
     System.out.println(run.origActivity.getPackageName()); 
    } else { 
     System.out.println(run.id); 
    }     
} 
+0

начать с 'ActivityManager.RECENT_WITH_EXCLUDED' будет возвращать деятельности, которые имеют флаг exclude_from_recent, которые не отображаются в панели последних приложений (очевидно) – njzk2

+0

@ njzk2, любые предложения о том, что я должен изменить его? Возможные значения: «ActivityManager.RECENT_WITH_EXCLUDED» и «ActivityManager.RECENT_IGNORE_UNAVAILABLE». –

+1

Я думаю, что это флаг, см. Раздел «Константы» ссылки, которую вы указали. Вы используете флаг 'RECENT_WITH_EXCLUDED' - возвращаете все задачи, даже те, которые установили флаг' FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS', я считаю, что правильным является в этом случае 'RECENT_IGNORE_UNAVAILABLE' -> Предоставляет список, который не содержит никаких недавних задач, которые в настоящее время недоступны для пользователя. – g00dy

ответ

0

Это возвращает правильное число последних мероприятий. Забавно, как я не нашел это решение в другом месте.

ActivityManager mgrActivity = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 

for (RecentTaskInfo run : mgrActivity.getRecentTasks(Integer.MAX_VALUE, ActivityManager.RECENT_IGNORE_UNAVAILABLE)) { 
    if (run.baseIntent.getCategories().contains(Intent.CATEGORY_LAUNCHER)) { 
     System.out.println(run.baseIntent.toString()); 
    } 
}