Android L之后 getRunningTasks() 和 getRunningAppProcesses()_chenglu3110的博客-程序员秘密

技术标签: java  runtime  移动开发  

Android L 之后Google收紧了权限的控制 .

1)getRunningAppProcesses代替方法

这时我们可以尝试通过ps命令来获取后台运行的进程

private static  String getRunningApk() {
    long startTime = System.currentTimeMillis();
    String pgkProcessAppMap = "";
    Set<String> rProcess = new HashSet<String>();
    String cmd = "ps";
    try {
        java.lang.Process p = Runtime.getRuntime().exec(cmd);
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        int index = 0;
        while ((line = in.readLine()) != null) {
            if (index > 0) {
                StringTokenizer st = new StringTokenizer(line);
                int lenght = st.countTokens();
                if (lenght > 0) {
                    String uid = st.nextToken();//0 index USER
                    if (uid.startsWith("u0_") ) {
                        String processInfo = "";
                        for (int i = 0; i < (lenght - 1); i++) {
                            if (!(i == (lenght - 2))) {
                                st.nextToken();
                            } else {
                                processInfo = st.nextToken();
                            }
                        }
                        
                        if (!TextUtils.isEmpty(processInfo)) {
                            if (processInfo.contains(":")) {
                                String a[] = processInfo.split(":");
                                rProcess.add(a[0]);
                            } else {
                                rProcess.add(processInfo);
                            }
                        }
                        
                    }
                }
            }
            index++;
        }
    } catch (IOException e) {
        Log.logE("getRunningApk err="+e.toString());
    }
    for(String pro : rProcess){
        pgkProcessAppMap += pro + ",";
    }
    if (pgkProcessAppMap.contains(",") && pgkProcessAppMap.length() > 0 ) {
        pgkProcessAppMap = pgkProcessAppMap.substring(0, pgkProcessAppMap.length()-1);
    }
    long endTime = System.currentTimeMillis();
    Log.logE("do_exec pgkProcessAppMap = " + pgkProcessAppMap + "\t time = " + (endTime - startTime));
    return pgkProcessAppMap;
}

2)getRunningTasks代替方法

google发现API 21 新增的接口 android.app.usage , 这个 API 比已弃用的 getRecentTasks( ) 方法提供了更详细信息

@TargetApi(21)
public static String getTopPackageNameFor21(Context mContext) {
    String topPackageName = "";
    android.app.usage.UsageStatsManager usm = (android.app.usage.UsageStatsManager) mContext.getSystemService("usagestats");
    Calendar calendar = Calendar.getInstance();
    long endTime = calendar.getTimeInMillis();
    long startTime = calendar.getTimeInMillis() - 60*1000;

    //Log.logD(" Range start:" + dateFormat.format(startTime) );
    //Log.logD(" Range   end:" + dateFormat.format(endTime));
    android.app.usage.UsageEvents uEvents = usm.queryEvents(startTime,endTime);
    
    while (uEvents.hasNextEvent()){
        android.app.usage.UsageEvents.Event e = new android.app.usage.UsageEvents.Event();
        uEvents.getNextEvent(e);
        if (e != null){
             //Log.logE(" Event: " + dateFormat.format(e.getTimeStamp()) + "::" +  e.getPackageName());
             topPackageName = e.getPackageName();
        }
    }
    return topPackageName;
}

注: 必须要在manifest中申明权限

<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />

 

The End!

Anyway,小编第一次这上面写文章,总有发表一下感言的,哈哈。虽然网络上以已经有很多类似的啦,不过小编还是写了一下,不为别的,就是给自己补补脑。Bye~

转载于:https://my.oschina.net/u/3284970/blog/842302

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenglu3110/article/details/100698028

智能推荐

FileInputStream读取文件&FileOutputStream写入文件_低调使人进步的博客-程序员秘密

Java的流式输入输出建立在4个抽象类的基础上:InputStream,OutputStream,Reader和Writer。它们用来创建具体的流式子类。InputStream和OutputStream类被设计为字节类,而Reader和Writer被设计为字符流类。一般,处理字符和字符串用字符流类,字节和二进制文件用字节类。本篇只讲字节流类;字节流中的两个顶层类为:InputSt

Go学习之go-ethereum【以太坊】源码分析 - Kademlia协议原理(三)_bboyHan的博客-程序员秘密

在上一篇讲解了eth源码中的rlp的理解和分析,接下来将进入go-etherenum中 p2p下,去领略一番。在此之前,需要补充几个前提知识(DHT、Kademlia)。    - DHT(分布式哈希表)    - Kademlia协议    - 以太坊中的p2p1、什么是DHT(来自百度百科)DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要...

刷力扣学习分治[leetcode53. 最大子序和][leetcode105. 从前序与中序遍历序列构造二叉树][leetcode108. 将有序数组转换为二叉搜索树]_上大人段乙己的博客-程序员秘密

刷力扣学习分治分治是一种很常见的思路,把一个大问题分解成一个一个小问题,这在很多算法里都有体现,循环和递归都能实现这种算法,可以通过分治来学习怎么用循环和递归实现各种算法#53.最大子序和class Solution: def maxSubArray(self, nums: List[int]) -&gt; int: S = 0 maxS = nums[0] for i in nums: if S &lt; 0:

ExtJs_Ext.tree.TreePanel解释_cenyebao的博客-程序员秘密

/*! * Ext JS Library 3.3.0 *//** * @class Ext.tree.TreePanel * @extends Ext.Panel *  * The TreePanel provides(提供) tree-structu

tcp/ip协议三次握手、四次挥手_tcpip四次确认_weixin_43303455的博客-程序员秘密

tcp/ip协议三次握手、四次挥手TCP报文格式两次握手三次握手四次挥手TCP报文格式32位序号:随机生成,唯一标识当前报文的序号是多少,seq表示32位确认序号:对上一条发送的信息进行一个消息的确认,ack表示ACK:确认标志位,一位,只能表示0/1。SYN:1:发起一个新的连接FIN:1:结束一个连接两次握手说明:客户端向服务端发送报文,服务端收到了,说明服务端接受客户端的消息没问题。但服务端发给客户端的消息,客户端一定能收到么?服务端还是不知道。为了安全可靠:1:客户端知道我

使用Javascript进行Mongodb数据库的远程操作_DreamMakers的博客-程序员秘密

最近在工作中遇到了这么个问题,在软件开发过程中自己在测试服务器上创建了mongodb数据库,开发工作一切都很顺利,但是要上线时,需要提供运行脚本,以保证在现网的数据库中创建和更新数据库。该怎么做呢?以前没有学过mongodb,更没有学过脚本,于是从百度上和mongodb的官网寻找答案,原来mongodb是可以通过javascript执行命令的,而且mongodb中的指令基本都可以在js

随便推点

Springboot+Thymeleaf实现带参数跳转页面_springboot页面跳转带参数_Lovme_du的博客-程序员秘密

Springboot实现页面跳转需要引入依赖: &lt;dependency&gt; &lt;groupId&gt;org.thymeleaf&lt;/groupId&gt; &lt;artifactId&gt;thymeleaf&lt;/artifactId&gt; &lt;version&gt;3.0.11.RELEASE&lt;/version&gt; &lt;/dep...

微服务和分布式的区别_分布式任务调度工具和微服务对比_云和数据张老师的博客-程序员秘密

分布式架构是分布式计算技术的应用和工具,目前成熟的技术包括J2EE, CORBA和.NET(DCOM),这些技术牵扯的内容非常广,相关的书籍也非常多,也没有涉及这些技术的细节,只是从各种分布式系统平台产生的背景和在软件开发中应用的情况来探讨它们的主要异同。微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。(推荐学习:Java视频教程)微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通

Splay-Tree模板_Cwolf9的博客-程序员秘密

#include &amp;amp;amp;lt;map&amp;amp;amp;gt;#include &amp;amp;amp;lt;set&amp;amp;amp;gt;#include &amp;amp;amp;lt;cmath&amp;amp;amp;gt;#include &amp;amp;amp;lt;ctime&amp;amp;amp;gt;#include &amp;amp;amp;lt;stack&amp;amp;amp;gt;#include &amp;amp;amp;lt;

fresco android 6.0 不支持 gif,Fresco Gif加载优化_flymemory的博客-程序员秘密

Fresco Gif加载优化因为项目中需要用到加载Gif动图,而我们的图片加载框架用的就是Fresco,所以自然而然就想到用Fresco来做Gif的加载,但是在写Demo的过程中发现,Fresco加载Gif的过程中,性能成了比较大的问题,具体表现就是频繁GC,CPU消耗较大,所以当时又调研了android-gif-drawable,运行一下,发现性能不错,内存占用很低,并且内存曲线很稳定,CPU占...

VS2010报错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏_win7 vs2010 lnk1123_地球智星的博客-程序员秘密

win7下vs2010出错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏解决方法:直接删除安装文件夹下的C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin的cvtres.exe

Python爬虫入门——3.9 Scrapy爬虫实战_酸辣粉不要辣的博客-程序员秘密

声明:搬运自“ 从零开始学Python网络爬虫  ”作者:罗攀,蒋仟机械工业出版社ISBN:9787111579991上一节我们讲了Scrapy框架的安装以及基本信息,这一节我们就开始使用Scrapy框架进行知乎数据的爬取。首先利用命令管理器创建一个知乎的项目项目。具体做法是在打开的命令管理器输入  ˚F:(我要创建项目的盘) cd F:\ soft_exercise \ pytho...

推荐文章

热门文章

相关标签