Android getRunningTasks和getRunningAppProcesses失效
Android 5.0以上的getRunningTasks失效,该方法可以获得在前台运行的系统进程。可以用getRunningAppProcesses方法暂时替代。
android6.0以上的getRunningAppProcesses也失效,系统关闭了三方软件对系统进程的访问,出于安全考虑。
参考资料:
- http://blog.csdn.NET/hyhyl1990/article/details/45700447
- http://www.cnblogs.com/luoyangcn/p/4936830.html
替代方案
可以通过以下两种方式得到topActivity的信息:
1、利用ActivityManager.getRunningAppProcesses();获得当前正在运行的所有应用程序的进程。然后根据当前进程信息里的importance和processState来确定当前在顶部的进程。不过这里得到的进程信息里只有被载入当前进程的所有包名pkgList,所以只能判断当前列表有没有你需要监控的包名。
private String[] getActivePackages(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
final Set<String> activePackages= new HashSet<String>();
final List<ActivityManager.RunningAppProcessInfo> processInfos = am.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(new String[activePackages.size()]);
}
2、利用UsageStatsManager,并且调用他的queryUsageStats方法来获得启动的历史记录,调用这个方法需要设置权限“Apps withusage access”。但是这个queryUsageStats只能查询一段时间内的使用状态,如果时间间隔较短,并且一段时间不使用手机,获得的列表就可能为空。
static class RecentUseComparator implements Comparator<UsageStats>
{
@Override
public int compare(UsageStats lhs,UsageStats rhs) {
return (lhs.getLastTimeUsed() > rhs.getLastTimeUsed()) ? - : (lhs.getLastTimeUsed()== rhs.getLastTimeUsed()) ? : ;
}
}
private StringgetTopPackage(Context context) {
long ts = System.currentTimeMillis();
RecentUseComparator mRecentComp = new RecentUseComparator();
UsageStatsManager mUsageStatsManager =(UsageStatsManager) context.getSystemService("usagestats");
//查询ts-10000 到ts这段时间内的UsageStats,由于要设定时间限制,所以有可能获取不到
List<UsageStats> usageStats =mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,ts - , ts);
if (usageStats == null) return "";
if (usageStats.size() == ) return "";
Collections.sort(usageStats,mRecentComp);
Log.d(TAG,"====usageStats.get(0).getPackageName()"+ usageStats.get().getPackageName());
return usageStats.get().getPackageName();
}
Android getRunningTasks和getRunningAppProcesses失效的更多相关文章
- Android开发(十六)——Android listview onItemClick事件失效的原因
参考: Android listview onItemClick事件失效的原因.http://blog.csdn.net/wangchun8926/article/details/8793178
- Android卡片设置透明度失效问题
最近在做蓝牙电话项目,需要支持双路通话,涉及到通话卡片透明度调节,当正在通话中,有新的来电时,原来的通话卡片需要做成30%的透明度,本来很简单的一个小改进,但通过 setAlpha()接口总是失效! ...
- Android ListView点击失效
item中存在 ImageButton 等可以点击的组件,这会抢先获得ListView的焦点. 从而导致item点击失效
- android 学习过程中登陆失效的个人理解
今天在学习的过程中,要做登陆失效的功能,所以就找了些资料.好好看了一下.研究了一番,慢慢的做出来了! 比方:你在一个手机端登陆了账号,在另外的一个手机端也登陆了账号,此时.前一个手机端的账号会提示登陆 ...
- android studio中文乱码的解决方法【转】
一. 在android的源文件中的乱码问题 Android Studio安装后发现所有的中文,不管是界面上的还是输出的log中的中文都变成小框框,具体的解决方法如下, 可以肯定是字体的问题 解决:菜单 ...
- 前端之Android入门(3):MVC模式(上)
很多Android的入门书籍,在前面介绍完布局后就会逐个介绍组件,然后开始编写组件使用的例子.每每到此时小伙伴们都可能会有些疑问:是否应该先啃完一本<Java编程思想>学点 Java 知识 ...
- Android 常用动画之RotateAnimation
前两天接到任务做一个UI,有用到动画,于是抽空看了下Android动画相关知识. Android Animation共有四大类型,分别是 Alpha 透明度动画 Scale 大小伸 ...
- Android Studio 2.3.3 出现Error:(26.13) Fail to resole: com.android.support.appcompat永久解决方法
Android Studio 出现Error(26.13):Fail to resole:com.android.support.appcompat-v7.28_ Install Repository ...
- Android:MVC模式(上)
很多Android的入门书籍,在前面介绍完布局后就会逐个介绍组件,然后开始编写组件使用的例子.每每到此时小伙伴们都可能会有些疑问:是否应该先啃完一本<Java编程思想>学点 Java 知识 ...
随机推荐
- luogu4151 最大XOR和路径
然后呢这道题其实很简单 我们先考虑一种简单的情况,从1直接走到n(不管怎么走的,反正就是走) 然后就能找到一个路径了 这个走的过程用各种zmj算法都能过 然后呢我们发现如果直接走基本不会得到最优解,考 ...
- i++操作非原子的验证代码
package incre; public class Incre { public static void main(String[] args) { class Count implements ...
- docker上安装eslaticsearch
一 elasticsearch安装 1 查找镜像: docker search elasticsearch 可以看到如下截图; 2 拉取镜像 docker pull elasticsearch 我并没 ...
- HP EliteBook 8570p TouchPad Issue
最近更换了笔记本,当时TouchPad总是不能用,有个指示灯总是亮着:同事同型号的就没有这样的问题. Google了好久终于找到了一篇帖子能解决我的问题.分享给朋友们. Link: http://h3 ...
- AJAX使用说明书 基础
AJAX简介 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异 ...
- 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)
HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...
- input keyup的时候实现内容过滤
当在文本框中输入关键字,就会搜索出包含关键字的数据 实现: 只需要一个内容过滤即可 <body> <input type="text" id="sear ...
- Html5的datetime-local控件
参考http://stackoverflow.com/questions/7815232/html5-input-type-datetime-vs-datetime-local-which-shoul ...
- B树与B+
简单剖析B树(B-Tree)与B+树https://blog.csdn.net/z_ryan/article/details/79685072 B树和B+树的插入.删除图文详解https://www. ...
- asp.net core WebAPI学习以及 发布(***入门学习)
A asp.net Core 系列[一]——创建Web应用 asp.net Core 系列[二]—— 使用 ASP.NET Core 和 VS2017 for Windows 创建 Web API a ...