android L 变化之 ActivityManager.getRunningTasks不能获取当前的task列表

来源:互联网 发布:建站100元 编辑:程序博客网 时间:2024/05/18 03:23

android L 变化之 ActivityManager.getRunningTasks不能获取当前的task列表了

官方解释如下:

@deprecated Asof {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method is no longeravailable to third party applications: the introduction of document-centricrecents means it can leak person information to the caller.For backwardscompatibility,it will still retu rn a small subset of its data: at least thecaller's own tasks, and possibly some other tasks such as home that are knownto not be sensitive.

可以通过以下两种方式得到topActivity的信息:

1)利用ActivityManager.getRunningAppProcesses();获得当前正在运行的所有应用程序的进程。然后根据当前进程信息里的importanceprocessState来确定当前在顶部的进程。不过这里得到的进程信息里只有被载入当前进程的所有包名pkgList,所以只能判断当前列表有没有你需要监控的包名。 

private String[] getActivePackages() {

          final Set<String> activePackages= new HashSet<String>();

          finalList<ActivityManager.RunningAppProcessInfo> processInfos =mActivityManager

                            .getRunningAppProcesses();

          for(ActivityManager.RunningAppProcessInfo processInfo : processInfos) {

                   if (processInfo.importance ==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND

                                      &&processInfo.processState ==ActivityManager.START_TASK_TO_FRONT){

                            activePackages.addAll(Arrays.asList(processInfo.pkgList));

                            Log.d(TAG,"====processInfo.processState "

                                               +processInfo.processState + processInfo.processName);

                   }

          }

          return activePackages.toArray(newString[activePackages.size()]);

}

2) 利用UsageStatsManager,并且调用他的queryUsageStats方法来获得启动的历史记录,调用这个方法需要设置权限“Apps withusage access”。但是这个queryUsageStats只能查询一段时间内的使用状态,如果时间间隔较短,并且一段时间不使用手机,获得的列表就可能为空。

<uses-permission

   android:name="android.permission.PACKAGE_USAGE_STATS"

   tools:ignore="ProtectedPermissions" />

 

static classRecentUseComparator implements Comparator<UsageStats> {

          @Override

          public int compare(UsageStats lhs,UsageStats rhs) {

                   return (lhs.getLastTimeUsed()> rhs.getLastTimeUsed()) ? -1 : (lhs

                                      .getLastTimeUsed()== rhs.getLastTimeUsed()) ? 0 : 1;

          }

}

 

private StringgetTopPackage() {      

          Log.d(TAG,"===getTopPackage=");

          long ts = System.currentTimeMillis();

          RecentUseComparator mRecentComp = newRecentUseComparator();

 

          UsageStatsManager mUsageStatsManager =(UsageStatsManager) getSystemService("usagestats");

          List<UsageStats> usageStats =mUsageStatsManager.queryUsageStats(

                            UsageStatsManager.INTERVAL_BEST,ts - 10000, ts);  //查询ts-10000 到ts这段时间内的UsageStats,由于要设定时间限制,所以有可能获取不到

 

          if (usageStats == null)

                   return "";

          if (usageStats.size() == 0)

                   return "";

 

          Collections.sort(usageStats,mRecentComp);

         

          Log.d(TAG,"====usageStats.get(0).getPackageName()"+ usageStats.get(0).getPackageName());

 

          returnusageStats.get(0).getPackageName();

}

0 0
原创粉丝点击