【问题标题】:How to get list of recent apps with Android API 21 Lollipop?如何使用 Android API 21 Lollipop 获取最近的应用程序列表?
【发布时间】:2014-12-04 00:26:15
【问题描述】:

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

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

【问题讨论】:

    标签: android packages usage-statistics android-recents


    【解决方案1】:
    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,可以获得当前运行的前台包名。

    来源:How to get recent tasks on Android "L"?

    【讨论】:

    • 我实际上试过这个,但我对查询部分感到困惑。 10秒的查询统计不起作用,有没有办法在设备启动后查询?此外,在结果图中,还会显示系统 UI、锁屏等应用程序,我不确定如何过滤掉这些应用程序?
    • android.os.SystemClock.uptimeMillis() 返回自启动以来的毫秒数 :)
    • 似乎有效,谢谢!当我的手机已经打开了几天时,它仍然只给我 10 个结果,似乎应该有更多。但这对我来说很好,因为我只需要
    • 仅供参考,getSystemService(Context.USAGE_STATS_SERVICE) 仅适用于 22 级及以上。 API 21 中可能存在一个空白,您不能使用 getRecentTasks 并且不能使用 UsageStatsManager。 (developer.android.com/reference/android/content/…)
    • 字符串“usagestats”是什么?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多