代码之家  ›  专栏  ›  技术社区  ›  Nicholas

BroadcastReceiver中的AlertDialog

  •  3
  • Nicholas  · 技术社区  · 14 年前

    我正在尝试创建一个应用程序,可以使用Android作为传真机,即发送图片作为传真,或接收传真并另存为图片。到目前为止,我是从地面开始,并确保我可以拦截一个由用户决定的呼叫。我在我的程序清单中注册了一个接收器,它带有一个电话状态过滤器,当状态改变时会显示出来(即来电)。

    因此,在我的BroadcastReceiver上,我尝试弹出一个警报对话框,提示用户要么接受传真,要么接受呼叫,但警报对话框似乎抛出了一个android.view.windowManager$badTokenException错误,当它有一个传入呼叫时。我的代码只是一个onreceive(context arg0,intent arg1),我将arg0传递给alertdialog…

    下面是完整的错误消息

    08-08 00:16:14.315: ERROR/AndroidRuntime(275): java.lang.RuntimeException: Unable to start receiver com.android.fax.IncomingFax: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
    08-08 00:16:14.315: ERROR/AndroidRuntime(275):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2550)
    08-08 00:16:14.315: ERROR/AndroidRuntime(275):     at android.app.ActivityThread.access$3000(ActivityThread.java:116)
    08-08 00:16:14.315: ERROR/AndroidRuntime(275):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1843)
    

    根据我在AlertDialog代码中看到的内容,它传递上下文以及窗口和窗口管理器,我认为这就是它崩溃的原因,是否有更好的方法或其他我应该使用的方法来覆盖调用屏幕?

    1 回复  |  直到 13 年前
        1
  •  3
  •   CommonsWare    14 年前

    首先,你不能从Android进入通话音频流。有了这个限制,我不知道你将如何收到传真。

    关于你的错误,登记了一份清单 BroadcastReceiver 不是一个 Activity ,因此无法创建对话框。原则上,你可以打电话 startActivity() 启动一个 活动 (也许有一个主题像对话),但我不知道它是否会出现在通话屏幕上。