包名启动即可:
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
context.startActivity(intent);
只针对于从通知栏唤醒应用,无需启动新的Activity ;
如果在后台是无法唤醒的,Android8.0对后台启动做了限制;https://developer.android.google.cn/about/versions/oreo/background?hl=zh_cn
走的弯路:
/**
* 唤醒APP
* @param context
*/
public static void rouseApp(Context context) {
if (BaseApplication.get().getTopActivity() != null) {
Intent intent = new Intent(context, BaseApplication.get().getTopActivity().getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);
}else {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
context.startActivity(intent);
}
}
public class BaseApplication extends Application {
private static Stack<Activity> activityStack;
private static BaseApplication instance;
public static BaseApplication get() {
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
initActivityStack();
}
/**
* 获取当前APP中Activity正在显示的数量
* 可用于判断APP处于前台还是后台
*
* @return
*/
public static Integer getActivityStackCount() {
return mActivityCount;
}
private static int mActivityCount = 0;
private void initActivityStack() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
addActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
mActivityCount++;
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
mActivityCount--;
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
finishActivity(activity);
}
});
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<>();
}
activityStack.add(activity);
}
public Activity getActivity(Class<?> cls) {
if (activityStack == null)
return null;
if (activityStack.isEmpty())
return null;
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
return activity;
}
}
return null;
}
/**
* 移除指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity = null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?>... clses) {
for (Class<?> cls : clses) {
Iterator<Activity> iterator = activityStack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
if (activity.getClass().equals(cls)) {
iterator.remove();
activity.finish();
}
}
}
}
/**
* 结束除参数外的所有activity
*
* @param clses
*/
public void finishAllOther(Class<?>... clses) {
Iterator<Activity> iterator = activityStack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
final Class actCls = activity.getClass();
boolean finish = true;
for (Class<?> cls : clses) {
if (null == cls)
continue;
if (actCls.equals(cls)) {
finish = false;
break;
}
}
if (finish) {
iterator.remove();
activity.finish();
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
Iterator<Activity> iterator = activityStack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
iterator.remove();
activity.finish();
}
}
public void finishiTopActivity() {
final int size = activityStack.size();
if (size > 1) {
activityStack.get(size - 1).finish();
}
}
public Activity getTopActivity() {
if (activityStack.isEmpty())
return null;
final int size = activityStack.size();
if (size >= 1) {
return activityStack.get(size - 1);
} else {
return null;
}
}
/**
* 判断某Activity是否在栈中
*
* @param cls
* @return
*/
public boolean isExist(Class<?> cls) {
if (activityStack == null)
return false;
if (activityStack.isEmpty())
return false;
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
return true;
}
}
return false;
}
/**
* 退出应用程序
*/
public void AppExit() {
finishAllActivity();
}
}