Получить список последних и запущенных приложений, а не процессов
Я много пытался получить список последних и запущенных приложений (не процессов), но не смог его получить.
Я рассмотрел все вопросы, связанные с переполнением стека, в связи с этим, но единственный ответ, который я получил о запущенных процессах и последних задачах, а не о конкретных приложениях, как мы видим в диспетчере задач Samsung Mobile при длительном нажатии кнопки "Домой".
Я могу получить запущенные процессы по этому коду:
ActivityManager actvityManager = (ActivityManager)
this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();
for(RunningAppProcessInfo runningProInfo:procInfos){
Log.d("Running Processes", "()()"+runningProInfo.processName);
}
Он дает имена пакетов всех процессов, но я хочу только имена пакетов приложений, которые я запустил (недавние и запущенные).
Как я могу извлечь это из запущенных процессов приложения?
3 ответа
ОБНОВЛЕНИЕ: я не вижу способа получить название недавних задач, даже используя приведенное ниже решение, но это будет работать для текущих и замороженных задач: getRunningTasks
С помощью getRunningTasks
вернет список RunningTaskInfo
которые содержат базу ComponentName
который вы можете использовать, чтобы получить имя пакета, позвонив getPackageName()
,
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Вы должны посмотреть в getRecentTasks. Его функция описывается как
Возвращает список задач, которые пользователь недавно запустил, причем самые последние из них являются первыми, а старые - по порядку.
Примечание. Этот метод предназначен только для отладки и представления пользовательских интерфейсов управления задачами.
Это должно получить вам список всех приложений, которые недавно запущены или работают.
Недавние вы можете получить из getRecentTasks, который возвращает RecentTaskInfo.
Для уровня API < 21
Вам нужно это разрешение:
<uses-permission android:name="android.permission.GET_TASKS" />
И этот код:
ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RecentTaskInfo> recentTasks = activityManager.getRecentTasks(10, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
for (ActivityManager.RecentTaskInfo recentTask : recentTasks) {
try {
String packageName = recentTask.baseIntent.getComponent().getPackageName();
ApplicationInfo appInfo = getPackageManager().getApplicationInfo(packageName, PackageManager.GET_META_DATA);
String label = getPackageManager().getApplicationLabel(appInfo).toString();
Log.i("APPS", label);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}