Android 判断程序前后台状态

package com.123.www

import java.util.List;  
  
import android.app.ActivityManager;  
import android.app.ActivityManager.RunningAppProcessInfo;  
import android.app.Service;  
import android.content.Context;  
import android.content.Intent;  
import android.os.IBinder;  
import android.util.Log;  
  
public class AppStatusService extends Service {  
    private static final String TAG = "[AppStatusService]";  
    private ActivityManager activityManager;  
    private String packageName;  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        return null;  
    }    


@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
    activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);  
        packageName = this.getPackageName();  
        new Thread() {  
            public void run() {  
                try {  
                    while (true) {  
                        Thread.sleep(1000);  
                        if (isAppOnForeground()) {  
                            Log.i(TAG, "true");  
                        } else {  
                            Log.i(TAG, "false");  
                        }  
                    }  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }.start();  
   
super.onStart(intent, startId);
}


  
    private boolean isAppOnForeground() {  
 
        List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();  
        if (appProcesses == null) return false;  
        for (RunningAppProcessInfo appProcess : appProcesses) {  
       
            if (appProcess.processName.equals(packageName)  
                    && appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {            
                return true;  
            }  
        }  
        return false;  
    }  

}  

这是只能判断 一个app 一个进程的情况,例如app当中调用Intent发送短信则会出现mms进程


修改后虽然反应不是很灵敏 但是能用


public static boolean isAppOnForeground(Context context) {  
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = context.getPackageName();
        List<RecentTaskInfo> appTask = activityManager.getRecentTasks(1, 0);
        if (appTask == null) return false;        
        if(appTask.get(0).baseIntent.toString().contains(packageName)){
        return true;
        }
        return false;  
    }

<uses-permission android:name="android.permission.GET_TASKS"/>          //manifest中加上权限

上面方法 有时候在task中的activity切换时会出错,先修改为

List<RunningTaskInfo> runningTask = activityManager.getRunningTasks(1);

 if(runningTask.get(0).baseActivity.toString().contains(packageName)){
        return true;
        }


继续修改:

public static boolean isOnForeground(Context context){
		ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningAppProcessInfo> runningAppProcesses = manager.getRunningAppProcesses();
		for(RunningAppProcessInfo processInf : runningAppProcesses){
			if(processInf.processName.equals(context.getPackageName())){
				if(processInf.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
					return true;
				}else{
					return false;
				}
			}
		}
		return false;
	}


app当中调用Intent发送短信、打电话、按Home键 processInf.importance值为 IMPORTANCE_PERCEPTIBLE

按back键退出程序 processInf.importance值为 IMPORTANCE_BACKGROUND

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值