错误的窗口令牌,您无法在创建 Activity 之前或在广播接收器中隐藏异常之后显示对话框
Posted
技术标签:
【中文标题】错误的窗口令牌,您无法在创建 Activity 之前或在广播接收器中隐藏异常之后显示对话框【英文标题】:Bad window token, you cannot show a dialog before an Activity is created or after it's hidden exception in broadcastreceiver 【发布时间】:2017-12-22 21:03:13 【问题描述】:我正在 onReceive 方法中创建材质对话框。
@Override
public void onReceive(Context context, Intent intent)
new MaterialDialog.Builder(context)
.title(sender).content(m).positiveText("C").negativeText("Cl").onPositive(new MaterialDialog.SingleButtonCallback()
@Override
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction)
copyToClipboard(m);
).onNegative(new MaterialDialog.SingleButtonCallback()
@Override
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction)
).show();
我得到以下异常
Caused by: com.afollestad.materialdialogs.MaterialDialog$DialogException: Bad window token, you cannot show a dialog before an Activity is created or after it's hidden.
【问题讨论】:
这里也添加你自己的Receive方法的代码。对话框应始终显示在 UI 线程上。 On Receive 通常在 BG 线程中 这段代码你在哪里写的,我的意思是在活动或片段的哪里? 问题已编辑 【参考方案1】:您不能直接从广播接收器打开对话框,因为它是一个以 UI 为中心的活动。最好的方法是设计一个具有透明背景的自定义活动,将其注册为广播接收器,然后在那里显示警报对话框。
参考Link
【讨论】:
以上是关于错误的窗口令牌,您无法在创建 Activity 之前或在广播接收器中隐藏异常之后显示对话框的主要内容,如果未能解决你的问题,请参考以下文章
对话框抛出“无法添加窗口 - 令牌 null 不适用于应用程序”,getApplication() 作为上下文
为啥我收到错误“无法生成令牌。使用 Nodemailer 时检查您的身份验证选项?