如何在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) {
}
});
}
复制代码