判断App是否启动
boolean isAppStarted() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> infos = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info : infos) {
if (info.processName.equals(this.getPackageName())) {
return true;
}
}
return false;
}
若App已经启动状态
/**
* 得到Task栈,启动栈顶Activity,OrderCancelActivity属于单独的一个Task栈(会不会得到多个包含同一包名Activity的Task栈)
*/
void backToTask() {
ComponentName component = new ComponentName(getApplicationContext(), this.getClass());
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
List<ActivityManager.AppTask> tasks = manager.getAppTasks();
for (ActivityManager.AppTask task : tasks) {
if (task.getTaskInfo().baseIntent.getComponent().getPackageName().equals(component.getPackageName())) {
finish();
task.moveToFront();
break;
}
}
} else {
List<ActivityManager.RunningTaskInfo> runningTasks = manager.getRunningTasks(2);
for (ActivityManager.RunningTaskInfo info : runningTasks) {
if (!info.baseActivity.getClassName().contains(getClass().getName())
&& info.baseActivity.getPackageName().equals(component.getPackageName())) {
finish();
//requires android.permission.REORDER_TASKS
manager.moveTaskToFront(info.id, ActivityManager.MOVE_TASK_WITH_HOME);
break;
}
}
}
}
若App未启动则重新启动App(两种方式)
void startApp() {
ComponentName componentName = new ComponentName(this, StartActivity.class);
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(componentName);
startActivity(intent);
// Intent intent1 = getPackageManager().getLaunchIntentForPackage(getPackageName());
// startActivity(intent1);
finish();
}
注:使用notification进入Activity时,用:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);