繁体   English   中英

如何获取Android API 21 Lollipop最近的应用程序列表?

[英]How to get list of recent apps with Android API 21 Lollipop?

我正在创建一个家庭启动器,我希望与Android 5.0,Lollipop兼容。 我想在启动器上获取最近的应用程序列表。

但由于ActivityManager.getRecentTasks()不再适用于API 21,我该怎么办?

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,比如getRecentTasksgetRunningTasks高于API21,他们说这些方法不再适用于第三方应用。 当我在棒棒糖上方的设备上调用这些api时,它只返回null或我的app :(。

然后,我发现了一个方法来代替这些API,只要我们能得到的应用程序的packagename ,我们几乎可以做任何想做的事情。 基于linux的Android,我发现这个AndroidProcesses。它可以使用/proc来获取android的应用程序pidprocessName ,而processName就是这样的广告com.xxx.xxx:remote 请注意前面的:是packageName :)

获得packageName ,我想你知道该怎么做。 我认为我们可以根据流程运行背景启动Service来统计最近使用的应用程序。 统计时间越长,结果越准确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM