5

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

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

4

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

于 2014-12-04T01:20:27.133 回答
0

getRecentTasks我对 whis 感到困扰,因为 android 已经弃用了一些 API ,例如getRunningTasksAPI21 以上,他们说这些方法不再适用于第三方应用程序。当我在棒棒糖上方的设备上调用这些 api 时,它只返回 null 或我的应用程序 :(。

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

拿到后packageName,我想你知道该怎么做了。我想我们可以开始Service根据进程运行后台统计最近使用的应用程序。统计时间越长,结果越准确。

于 2016-12-09T02:35:36.600 回答