判断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; }