【问题标题】:Bad window token, you cannot show a dialog before an Activity is created or after it's hidden exception in broadcastreceiver错误的窗口令牌,您无法在创建 Activity 之前或在广播接收器中隐藏异常之后显示对话框
【发布时间】:2023-12-25 14:06:02
【问题描述】:

我正在 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 线程中
  • 这段代码你在哪里写的,我的意思是在活动或片段的哪里?
  • 问题已编辑

标签: android android-activity broadcastreceiver android-alertdialog


【解决方案1】:

您不能直接从广播接收器打开对话框,因为它是一个以 UI 为中心的活动。最好的方法是设计一个具有透明背景的自定义活动,将其注册为广播接收器,然后在那里显示警报对话框。

参考Link

【讨论】: