Android 2.1:AlertDialog中的BadTokenException错误

时间:2012-05-19 18:27:34

标签: android broadcastreceiver

我有一个可以处理sms消息的Android应用程序。当新的短信到达Android时,将从我的班级调用“NEW_SMS”广播接收器的代码。如您所知,我的“sms_recieved_class”中的“onReceive”方法获得了一些上下文(来自系统)。使用意图,我的短信广播接收器调用另一个与sms数据库做某事的类(最初通过“onReceive”从系统获得的上下文用于通过发送另一个广播从其他类调用代码)。

其他类使用sms数据库,它也是广播接收器。它对我上面提到的班级发送的广播作出反应。如果“弄乱”数据库出错,app应显示自定义错误对话框。现在,问题就出现了!

自定义错误对话框代码:

public static void setUpError(Context act,String ERRMSG, StackTraceElement[] stack) {

AlertDialog.Builder builder = new AlertDialog.Builder(act);

    final StackTraceElement[] finStack = stack;
    final String errMsg=ERRMSG;
    final Context ctxFin = act;

    builder.setMessage(poruka)...setting up alert buttons...

    AlertDialog alert = builder.create();
    alert.show();

}

“alert.show()”行出错。我很困惑,因为当我的应用程序可见时我尝试显示此对话框(并将“someAct.this”作为上下文传递)一切都很好。当我尝试使用从“broadcastReceiver.onReceive”(由系统调用)获取的Context显示警报时,我收到错误。我做错了什么?

P.S。在每次解决方案是“不使用getApplicationContext()”之后,在STOVF上搜索答案之后。由于我的两个在手机上收到新消息时调用的类都不是“活动”类型,我该怎么办?

1 个答案:

答案 0 :(得分:1)

首先,Dialog需要屏幕上的活动(所以没有任何打开的活动,你不能显示Dialog)。你可以做的是创建看起来像Dialog的活动。检查来自SO的this问题。