gpt4 book ai didi

android - 将 AlertDialog 显示为来自服务的系统覆盖窗口

转载 作者:可可西里 更新时间:2023-11-01 18:54:56 27 4
gpt4 key购买 nike

我在显示来自服务的 AlertDialog 时遇到问题。我能够使用 Toast 或使用 WindowManager(TYPE_SYSTEM_ALERT 或 TYPE_SYSTEM_OVERLAY)显示自定义布局窗口。但是,我不想使用自定义布局,我更喜欢直接使用漂亮的 AlertDialog GUI。

场景:

  • 运行服务。没有活跃的 Activity 。
  • 在某些外部事件上,服务发送通知
  • 当用户按下 Notification 时,服务会通过 PendingIntent 得到通知,并且应该显示 AlertDialog(使用 AlertDialog.Builder(this) 创建)

错误:

ERROR/AndroidRuntime(1063): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

搜索答案让我觉得我正在尝试目前不可能的事情(Android 2.2)。或者也许是。

最佳答案

已找到符合所述场景的解决方案。

  • 新 Activity 已创建并从服务启动。但是,它是具有半透明背景的 Activity 。此类 Activity 在 onCreate() 中没有 super.setContentView() 行。更重要的是,确保透明度

    @android:style/Theme.Translucent

是在 AndroidManifest.xml GUI 中此 Activity 的主题标签下输入的。因此,添加到 list xml 的新行是

android:theme="@android:style/Theme.Translucent"

  • onCreate() 中实际显示 AlertDialog

  • 按下 AlertDialog 按钮会导致 Dialog 和 Activity 关闭并发送 Intent(或使用其他方式)以将结果传递给服务。

  • 确保您为对话框定义了 setOnDismissListener()(实现应该在 Activity 上调用 finish())。如果您不这样做,请按返回键取消对话框,但会让您留在当前 Activity 中,该 Activity 是透明的,并且在用户看来确实有问题。

关于android - 将 AlertDialog 显示为来自服务的系统覆盖窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3814126/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com