实现起来非常简单,自定义Application,在onCreate中添加监听即可
private void initAppStatusListener() {
ForegroundCallbacks.init(this).addListener(new ForegroundCallbacks.Listener() {
@Override
public void onBecameForeground() {
Toast.makeText(mContext, "安质宝进入前台", Toast.LENGTH_SHORT).show();
}
@Override
public void onBecameBackground() {
Toast.makeText(mContext, "安质宝退至后台", Toast.LENGTH_SHORT).show();
}
});
}
获取进程名 来判断
// 进程名
private String getProcessName(Context cxt, int pid) {
ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
if (runningApps == null) {
return null;
}
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName;
}
}
return null;
}
在 oncreate()中 判断
String curProcess = getProcessName(this, android.os.Process.myPid());
if (!TextUtils.equals(curProcess,"com.certus.narissp7")) {
return;
}
initAppStatusListener();
最后 监听代码
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class ForegroundCallbacks implements Application.ActivityLifecycleCallbacks {
private static final long CHECK_DELAY = 600;
private static ForegroundCallbacks instance;
private boolean foreground = false, paused = true;
private Handler handler = new Handler();
private List<Listener> listeners = new CopyOnWriteArrayList<>();
private Runnable check;
public static ForegroundCallbacks init(Application application) {
if (instance == null) {
instance = new ForegroundCallbacks();
application.registerActivityLifecycleCallbacks(instance);
}
return instance;
}
public static ForegroundCallbacks get(Application application) {
if (instance == null) {
init(application);
}
return instance;
}
public static ForegroundCallbacks get(Context ctx) {
if (instance == null) {
Context appCtx = ctx.getApplicationContext();
if (appCtx instanceof Application) {
init((Application) appCtx);
}
throw new IllegalStateException("Foreground is not initialised and " + "cannot obtain the Application object");
}
return instance;
}
public static ForegroundCallbacks get() {
return instance;
}
public boolean isForeground() {
return foreground;
}
public boolean isBackground() {
return !foreground;
}
public void addListener(Listener listener) {
listeners.add(listener);
}
public void removeListener(Listener listener) {
listeners.remove(listener);
}
@Override
public void onActivityResumed(Activity activity) {
paused = false;
boolean wasBackground = !foreground;
foreground = true;
if (check != null)
handler.removeCallbacks(check);
if (wasBackground) {
for (Listener l : listeners) {
try {
l.onBecameForeground();
} catch (Exception exc) {
Log.i("ForegroundCallbacks",exc.getMessage());
}
}
}
}
@Override
public void onActivityPaused(Activity activity) {
paused = true;
if (check != null) handler.removeCallbacks(check);
handler.postDelayed(check = new Runnable() {
@Override
public void run() {
if (foreground && paused) {
foreground = false;
for (Listener l : listeners) {
try {
l.onBecameBackground();
} catch (Exception exc) {
Log.i("ForegroundCallbacks",exc.getMessage());
}
}
}
}
}, CHECK_DELAY);
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
public interface Listener {
public void onBecameForeground();
public void onBecameBackground();
}
}