判断Android程序是否在前台运行的两种方法
@Override
protectedvoidonStop(){
if(!isAppOnForeground()){
Debug.i("dwy","enterbackground");
mIsBackground=true;
}else{
Debug.i("dwy","foreground");
mIsBackground=false;
}
JudgeisAppinbackgroundwhenonStop()getcalled.
publicbooleanisAppOnForeground(){
//Returnsalistofapplicationprocessesthatarerunningonthe
//device
ActivityManageractivityManager=(ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
StringpackageName=getApplicationContext().getPackageName();
List<ActivityManager.RunningAppProcessInfo>appProcesses=activityManager
.getRunningAppProcesses();
if(appProcesses==null)
returnfalse;
for(ActivityManager.RunningAppProcessInfoappProcess:appProcesses){
//Thenameoftheprocessthatthisobjectisassociatedwith.
if(appProcess.processName.equals(packageName)
&&appProcess.importance==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
returntrue;
}
}
returnfalse;
}
方法二:
/**
*需要权限:android.permission.GET_TASKS
*
*@paramcontext
*@return
*/
publicbooleanisApplicationBroughtToBackground(Contextcontext){
ActivityManageram=(ActivityManager)context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo>tasks=am.getRunningTasks(1);
if(tasks!=null&&!tasks.isEmpty()){
ComponentNametopActivity=tasks.get(0).topActivity;
Debug.i(TAG,"topActivity:"+topActivity.flattenToString());
Debug.f(TAG,"topActivity:"+topActivity.flattenToString());
if(!topActivity.getPackageName().equals(context.getPackageName())){
returntrue;
}
}
returnfalse;
}