Как получить список последних приложений с Android API 21 Lollipop?

Я создаю домашний лаунчер и хочу совместимость с Android 5.0, Lollipop. Я хочу получить список последних приложений на панели запуска.

Но с тех пор ActivityManager.getRecentTasks() больше не работает в API 21, как я могу это сделать?

2 ответа

Решение
String topPackageName ;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats");                       
    long time = System.currentTimeMillis(); 
    // We get usage stats for the last 10 seconds
    List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000*10, time);                                    
    // Sort the stats by the last time used
    if(stats != null) {
        SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>();
        for (UsageStats usageStats : stats) {
            mySortedMap.put(usageStats.getLastTimeUsed(),usageStats);
        }                    
        if(mySortedMap != null && !mySortedMap.isEmpty()) {
            topPackageName =  mySortedMap.get(mySortedMap.lastKey()).getPackageName();                                   
        }                                       
    }
}  

С использованием UsageStatsManager, вы можете получить имена пакетов переднего плана, запущенных в данный момент.

Источник: Как получить последние задачи на Android "L"?

Я был обеспокоен с тобой, так как Android устарел некоторые API, такие как getRecentTasks,getRunningTasks выше API21, они говорят, что этот метод больше не доступен для стороннего приложения. Когда я вызываю эти API на устройстве выше леденец, он просто возвращает ноль или мое приложение:(.

Затем я нашел метод вместо этих API, пока мы можем получить приложениеpackagenameМы можем сделать практически все, что захотим. Android основан на Linux, я нашел этот AndroidProcesses. Он может использовать /proc получить приложение для Android pid а также processNameи processName такое объявление com.xxx.xxx:remote, Обратите внимание, что перед : это имя пакета:)

После получения packageNameя думаю ты знаешь что делать. Я думаю, что мы можем начать Service в статистику самого последнего используемого приложения в соответствии с процессом, запущенным в фоновом режиме. Чем дольше статистическое время, тем точнее результаты.

Другие вопросы по тегам