项目开始使用此方法判断程序是否在前台.
public static boolean isAppOnForeground(Context context){
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = context.getPackageName();
List<RecentTaskInfo> appTask = manager.getRecentTasks(Integer.MAX_VALUE, 1);
if(appTask!=null){
return appTask.get(0).baseIntent.toString().contains(packageName);
}
return false;
}
测试发现HTC的这两款机器并不太适用.
HTC Wildfire S A510e
HTC HD A9191
按home键应用切换到后台时,此方法可以判断是已经切换到了后台.
但是退出程序时,此方法并不能监听到最近的任务有何改变.从而不能得到结果是否切换到后台了.
此次问题 只体现在这两个手机.
此方法可解决问题.
public static boolean isAppOnForeground2(Context context) {
String packageName = context.getPackageName();
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
// Returns a list of application processes that are running on the device
List<RunningAppProcessInfo> appProcesses = manager.getRunningAppProcesses();
if (appProcesses == null) return false;
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(packageName)
&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}