包名启动即可:

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 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 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 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 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();    }}

 

更多相关文章

  1. 如何在后台运行Linux命令?
  2. Android(安卓)Intent 常用的Flag
  3. android resoult A>B 结束B A显示B中的内容
  4. Android(安卓)关于ObjectAnimator 的几种状态
  5. Android(安卓)Service之串行化Service:IntentService(系列3)
  6. 【Android】点击应用进而打开base.apk的调用流程再分析
  7. Android:监听应用前后台切换及思考
  8. Android(安卓)app前后台切换监听
  9. android监听视频播放结束

随机推荐

  1. Android(安卓)开 发 教 程 汇 总
  2. Android Logcat日志超长,打印不全解决办
  3. Android(安卓)player 流程(供参考)
  4. Android 神器 xposed 框架使用指南
  5. No resource found that matches the giv
  6. Android(安卓)上实现非root的 Traceroute
  7. 在Android里添加自己的log函数
  8. Android(安卓)混淆配置及Bug处理
  9. Android(安卓)Activity间传递数据
  10. Android(安卓)App跳转到应用市场