如何使用Android API 21 Lollipop获取最近应用列表?

5

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

但由于在API 21中ActivityManager.getRecentTasks()不再起作用,我该怎么做呢?

2个回答

10
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” 上获取最近的任务?


我实际尝试过这个,但是在查询部分我感到困惑。10秒的查询统计数据不起作用,有没有一种方法可以查询自设备启动以来的数据?此外,在结果映射中,会出现像系统UI、锁屏等应用程序,我不确定如何将它们过滤掉? - rosghub
2
仅供参考,getSystemService(Context.USAGE_STATS_SERVICE) 仅适用于22级及以上版本。在API 21中可能存在一个间隙,您无法使用 getRecentTasks 和 UsageStatsManager。(http://developer.android.com/reference/android/content/Context.html#USAGE_STATS_SERVICE) - Scott
"usagestats" 是什么字符串? - user5716019
除非用户授权使用使用统计数据,否则此功能将无法正常工作。 - ThunderWiring
“stats” 的大小始终为零!即使更改了“UsageStatsManager.INTERVAL_DAILY”和时间范围。 - Dr.jacky
显示剩余5条评论

0

我遇到了一个问题,因为安卓已经废弃了一些API,例如getRecentTasksgetRunningTasks在API21以上,他们说这些方法不再对第三方应用程序开放。当我在Lollipop以上的设备上调用这些API时,它只会返回null或我的应用程序:(。

然后我找到了一种方法来代替这些API,只要我们能够获取应用程序的packagename,我们就可以做任何想做的事情。基于Linux的安卓系统,我发现了AndroidProcesses。它可以使用/proc来获取安卓应用程序的pidprocessName,而processName就是com.xxx.xxx:remote这样的格式。请注意,:前面的部分是packageName :)

获取了packageName之后,我想你知道该怎么做了。我认为我们可以启动一个Service来统计根据正在后台运行的进程最近使用的应用程序。统计时间越长,结果越准确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接