1,首先要对自己应用的activity建立一个白名单
2,权限 <uses-permissionandroid:name="android.permission.GET_TASKS"/>
3,
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import java.util.List;
/**
* Created by anye0 on 2016/7/24.
*/
public class MyApplication extends Application {
public static MyApplication instances;
private boolean isBackground;
@Override
public void onCreate() {
super.onCreate();
instances = this;
listenForForeground();
listenForScreenTurningOff();
}
public static MyApplication getInstances() {
return instances;
}
private void listenForForeground() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Log.e("tag", activity.getClass().getSimpleName() + "---onActivityCreated");
}
@Override
public void onActivityStarted(Activity activity) {
Log.e("tag", activity.getClass().getSimpleName() + "---onActivityStarted");
}
//...
@Override
public void onActivityResumed(Activity activity) {
Log.e("tag", activity.getClass().getSimpleName() + "---onActivityResumed");
if (isBackground) {
notifyForeground();
}
}
@Override
public void onActivityPaused(Activity activity) {
Log.e("tag", activity.getClass().getSimpleName() + "---onActivityPaused");
}
@Override
public void onActivityStopped(Activity activity) {
Log.e("tag", activity.getClass().getSimpleName() + "---onActivityStopped");
isApplicationBroughtToBackground(activity);
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.e("tag", activity.getClass().getSimpleName() + "---onActivityDestroyed");
}
});
}
private void listenForScreenTurningOff() {//锁屏
IntentFilter screenStateFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
notifyBackground();
}
}, screenStateFilter);
}
private void notifyForeground() {
isBackground = false;
Log.e("tag", "---重新使用应用");
}
private void notifyBackground() {
isBackground = true;
Log.e("tag", "---后台");
}
/**
* 判断当前应用程序处于前台还是后台
*/
public boolean isApplicationBroughtToBackground(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
notifyBackground();
return true;
}
}
return false;
}
public boolean isBackground() {
return isBackground;
}
} /**
* 判断应用在前台还是后台
*
* @return
*/
private synchronized boolean isAppOnForeground() {
String processName = getPackageName();
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
List<ActivityManager.RunningAppProcessInfo> processList = activityManager.getRunningAppProcesses();
if (processList != null && processList.size() > 0) {
for (ActivityManager.RunningAppProcessInfo process : processList) {
if (process.processName.startsWith(processName)) {
boolean isBackground = process.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND && process.importance != RunningAppProcessInfo.IMPORTANCE_VISIBLE;
boolean isLockedState = keyguardManager.inKeyguardRestrictedInputMode();
if (isBackground || isLockedState) {
return false;
} else {
// 前台
return true;
}
}
}
}
return true;
}