不用悬浮窗权限弹出全局dialog的解决方法

如何在application弹出一个全局的dialog?

思路一: 直接在application new dialog执行show方法.

问题,直接在application或服务中new dialog传入的context都是系统的context,需要申请悬浮窗权限,而安卓系统众多,比如小米vivo等,不同的手机申请悬浮窗权限的方式不同,检测是否有悬浮窗权限的方式也不同.导致需要维护很大一段代码来进行,不同手机不同安卓版本的悬浮窗权限的检测申请,我们需要做大量操作.

思路二:

直接在application中new dialog 但是我们在给他context的时候是给他的栈顶activity的context,这样就可以让dialog根据栈顶activity的context,那么谁在栈顶,就是谁弹出.

思路二正确答案解析:

1.在Application中创建dialog

DialogBuilder builder;//这里定义读者自己的dialog
//此方法在需要弹出全局唯一dialog时调用
if (builder != null && builder.isShowing()) {
} else {
    builder = new DialogBuilder(app_activity).setTitle("提示")
            .setMessage(loginOutBus.getMsg())
            .setSimpleConfirmButton(com.zhiup.base.R.string.base_confirm, new DialogInterface.OnClickListener(){
    @Override
    public void onClick(DialogInterface dialog, int which) {
        RxBus.getInstance().send(new GoToLoginBus());
    }
});

builder.show();
复制代码

2.获取栈顶activity实例

private Activity app_activity = null;//此声明定义在application中
//此方法定义在Application中并在onCreate中调用
private void initGlobeActivity() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                app_activity = activity;
                Log.e("onActivityCreated===", app_activity + "");
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                Log.e("onActivityDestroyed===", app_activity + "");
            }

            /** Unused implementation **/
            @Override
            public void onActivityStarted(Activity activity) {
                app_activity = activity;
                Log.e("onActivityStarted===", app_activity + "");
            }

            @Override
            public void onActivityResumed(Activity activity) {
                app_activity = activity;
                Log.e("onActivityResumed===", app_activity + "");
            }

            @Override
            public void onActivityPaused(Activity activity) {
                Log.e("onActivityPaused===", app_activity + "");
            }

            @Override
            public void onActivityStopped(Activity activity) {
                Log.e("onActivityStopped===", app_activity + "");
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }
        });
    }
复制代码

转载于:https://juejin.im/post/5b3484596fb9a00e315c3060

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值