如何显示服务中的对话框

Fil*_*nik 49 service android dialog

我已经阅读了很多关于这个主题的帖子,但是没有什么对我有用(或者没有我想要的效果).

我有一个应用程序,登录后启动后台服务(Service类的实现).此服务与服务器同步,如果有新订单,则会创建通知.

到目前为止,一切都很好,我有通知和Toast消息.但是,我想要一个对话框,通知用户有关新订单的信息.

据我所知,您可以从服务中启动一个活动,该活动显示对话框.这有效,但活动从当前活动堆栈开始并显示对话框.我有一个没有附加视图的活动,但是它在黑色背景上正确显示了对话框.

我想要的是在当前活动上显示对话框,导致实际背景(运行活动)淡出并显示对话框.

这有点可能吗?

谢谢,菲利普

cha*_*ani 111

只有在系统警报对话框中,我们才能显示来自服务的对话框.因此,将TYPE_SYSTEM_ALERT窗口布局参数设置为Dialog,如下所示:

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
Run Code Online (Sandbox Code Playgroud)

但是,它需要SYSTEM_ALERT_WINDOW权限.所以,不要忘记在Manifest文件中添加此权限.

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Run Code Online (Sandbox Code Playgroud)

  • @ JacksOnF1re这应该是接受的答案,因为它回答了这个问题.别的都无所谓 (24认同)
  • @deej你想要糟糕的程序员吗?因为这就是你如何得到糟糕的程序员."没有其他事情重要" - 这就是为什么StackOverflow越来越多地成为复制和粘贴代码示例网站的态度.悲伤,但是真的. (14认同)
  • 这不应该是公认的答案.警报对话框仅适用于ALERTS!它将在所有内容之上,甚至例如通过电话和电池状态更改对话框.如果使用param system_alert,请注意您在做什么. (10认同)
  • @ JacksOnF1re不能同意.没有人限制你解释为什么有些不好,但它确实应该是一个侧面说明.回答问题,然后解释这是一个不好的做法,因为这和那个等等等等.目前的答案提供了一个解决方法.它甚至更好,因为不需要额外的权限.即便如此,我认为最好先回答这个问题. (6认同)
  • 好吧,不要再让我们争论这个了.如果你知道自己在做什么,那么一切都很好.也许这个旁注本来就够了,我的反应有点苛刻. (3认同)
  • @ JacksOnF1re有时你需要在所有事情之上实际显示一个警报...就像一个关键的警报..如果你正在开发的应用程序是某种低内存监视器服务而你真的想在内存不足时发出警报你做什么..然后它很好imo (2认同)

Jus*_*ler 44

我非常高度,强烈建议您不要这样做(这违反了Android设计和UI指南).通知是完成您正在做的事情的首选方式(听起来好像您已经完成了).

话虽这么说,如果你必须这样做,我建议只使用Dialog主题活动.这样您就不必启动单独的对话框.有关如何执行此操作,请参阅http://developer.android.com/guide/topics/ui/themes.html#ApplyATheme.

  • 我不确定如何处理.我们非常欢迎您提出另一个问题,但如果我的答案解决了您的问题,请务必点击我的解决方案旁边的复选框接受它. (2认同)