Android将后台应用唤起到前台,唤醒APP;

包名启动即可:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值