Получить список последних и запущенных приложений, а не процессов

Я много пытался получить список последних и запущенных приложений (не процессов), но не смог его получить.

Я рассмотрел все вопросы, связанные с переполнением стека, в связи с этим, но единственный ответ, который я получил о запущенных процессах и последних задачах, а не о конкретных приложениях, как мы видим в диспетчере задач 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();
    }
}
Другие вопросы по тегам