判断Android APP是否在前台运行


Andoid获取应用程序的运行状态常用的两种方法:ActivityManager.getRunningAppProcesses()和ActivityManager.getRunningTasks()

1. 由于考虑到安全性ActivityManager.getRunningTasks(),在5.0上已经deprecated了

2. 在Android 5.0以上系统,调用getRunningAppProcesses 方法返回的列表中只有该应用本身一个,也因为谷歌考虑到安全原因

3. 第三个方法,是ProcessManager.getRunningAppProcesses(),要加载外部jar: app_process_library.jar



实际测试中,如下:

public boolean isAppOnForeground() {  
ActivityManager activityManager = (ActivityManager) getApplicationContext()  
                .getSystemService(Context.ACTIVITY_SERVICE);  
        String packageName = context.getPackageName();

/**  
         * 获取Android设备中所有正在运行的App  
         * 在6.0和5.1.1的手机上,只返回本应用的包名且只有一个
         * 在天誉5.1.1的车载系统,签名应用可以用这个接口     
         */ 
 
        List appProcesses = activityManager  
                .getRunningAppProcesses();  
        if (appProcesses == null)  
            return false;  

        MyLog.i(TAG, "list size:"+appProcesses.size());
        for (RunningAppProcessInfo appProcess : appProcesses) {  
            // The name of the process that this object is associated with.  
        	MyLog.i(TAG, "appName:"+appProcess.processName+" appImportance:"+appProcess.importance);
        	if(appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
        			appProcess.processName.equals(packageName))
            {
                //appProcess.importanceReasonCode==0是什么?
		return true;
            }
           
        }  
        
        
        /**
         * 在6.0和5.1.1的手机上只返回本应用包名和桌面两个包名
         * 在天誉5.1.1的车载系统,签名应用可以用这个接口       
         */

        List infos = activityManager.getRunningTasks(10);//获取当前正在运行的应用列表
        MyLog.i(TAG, "task info list size:"+infos.size());
        for (RunningTaskInfo info : infos) {
        	
            MyLog.i(TAG,"((((((((((topactivity:"+info.topActivity.getPackageName()+" baseactivity:"+info.baseActivity.getPackageName());
            if(info.topActivity.getPackageName().equals(packageName) && info.baseActivity.getPackageName().equals(packageName))
            {
            	return true;
            }
        }
        
        /**需要加载外部jar:app_process_library.jar
         * 在6.0和5.1.1的手机上可以用
         * 在天誉5.1.1的车载系统,list 数量为0
         */
        List processInfos = ProcessManager.getRunningAppProcesses();
        MyLog.i(TAG,"%%%%%%%%%%%%%%%appProcess list size:"+processInfos.size());
        for (AndroidAppProcess processInfo : processInfos) {
            
            // 应用程序的包名
             if(processInfo.name.equals(packageName) && processInfo.foreground == true)
                {
                	return true;
                }
        }

	return false;
}

参考:http://blog.csdn.net/baidu_23478311/article/details/50475219

http://blog.csdn.net/brycegao321/article/details/53292649

外部jar下载地址:http://download.csdn.net/download/baidu_23478311/9394372

你可能感兴趣的:(android)