android L获取前台应用的包名

背景


前一段时间发现android5.0以后的手机发现我们的APP悬浮窗获取前台应用的名称不起作用了,以前我们的作法如下:

  public String getForegroundApp(Context context) {
       List<RunningAppProcesInfo> lr = context.getRunningAppProcesses();
       if (lr == null) {
            return null;
       }
       for (RunningAppProcessInfo ra : lr) {
           if (ra.importance == RunningAppProcessInfo.IMPORTANCE_VISIBLE
                || ra.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                      return ra.processName;
            }
      }
      return null;
     }```


现在发现上面的lr.size一直是1, 也就是只能查找到自己。 最后google发现API 21 新增的接口 [android.app.usage](https://developer.android.com/about/versions/android-5.0.html#AppUsageStatistics) , 这个 API 比已弃用的 getRecentTasks( ) 方法提供了更详细信息。

实现
------
***

通过查看官网文档说明实现如下:

```java
private String getForegroundApp() {
        long ts = System.currentTimeMillis();
        List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,ts-2000, ts);
        if (queryUsageStats == null || queryUsageStats.isEmpty()) {
                return null;
        }
        UsageStats recentStats = null;
        for (UsageStats usageStats : queryUsageStats) {
                if(recentStats == null || recentStats.getLastTimeUsed() < usageStats.getLastTimeUsed()){
                        recentStats = usageStats;
                }
        }
        return recentStats.getPackageName;
}```

权限要求
----------
***

要使用这个API,首先你必须在你的 mainifest 文件声明 “android.permission.PACKAGE\_USAGE\_STATS” 权限。然后在 设置 \> 安全 \> 有权查看使用情况的应用 里,用户必须允许该 app 的访问。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,270评论 25 709
  • AndroidManifest.xml文件安全探索 secbang.com simeon 最近在做一些apk的安全...
    simeon2015阅读 6,876评论 0 1
  • 岁月会磨平一个人的棱角, 褪去她的偏执和倔强。 只是, 很可笑的是, 她最青春的时候,身上带着太多的任性, 给...
    与晴_阅读 929评论 0 0
  • 幡然一悟是否是你一直追求的。 ——题记 他求过一支签,上下签。 问过寺里...
    麋鹿笔记阅读 4,168评论 0 0
  • 创建shell脚本可以使用比较好的编辑器,但是在mac下,最常用的当然是终端。1.新建一个shell文件cd 到指...
    奇流府阅读 4,071评论 0 2