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

更多相关文章

  1. Android中Broadcast的Intent大全
  2. android中设置进度条读取
  3. Qt_Qtopia与Android的进程间通讯方式
  4. Android(安卓)的网络编程(5)-通过ksoap2调用webservice示例
  5. 修改Android的开关机铃声、Android开关机画面与动画(附代码流程)
  6. android客户程序调用Webservice 心得
  7. WebView.onDraw (Android(安卓)4.1)
  8. Android(安卓)Process生命周期
  9. Android退出多个Activity的两个经典方法

随机推荐

  1. Android Activity类应用技巧分享
  2. Android(安卓)OpenCV中的几种基本数据结
  3. android JNI层线程回调Java函数
  4. android条形码二维码
  5. Android四大组件之Activity
  6. Android作为SocketServer以及手机IP问题
  7. Android Binder 框架层详解
  8. 修改Android屏幕默认旋转方向
  9. android中javah生成jni头文件报错问题
  10. Android输入法切换引导功能