如何在service中弹出dialog

如何在service中弹出dialog
0

作者:皇马船长更新于 05月09日访问(2071评论(4

我们都知道service是没有界面的,默默的在后台执行逻辑代码,有时候需要和前台有所交互,如:toast或弹出提示框等等

在service中弹出toast很简单,只要使用handler就可搞定,代码如下

1
2
3
4
5
6
hanlder.post(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(DialogService.this, "启动服务", 1).show();
     }
    });

而在service中弹出dialog时,如果写和activity同样的代码时会报错
s.jpg
因为这个dialog的显示是需要依附于一个activity,如果需要在servcie中显示需要把dialog设置成一个系统的dialog,即全局性质的提示框,所以只要手机处于开机状态,无论它现在处于何种界面之下,只要调用alter.show(),就会弹出提示框来。需要在show() 调用之前添加以下代码:

1
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));

注意:使用系统的Dialog需要在清单文件中添加权限,否则不会显示出来
android.permission.SYSTEM_ALERT_WINDOW

全部代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("提示");
    builder.setMessage("该下车了");
    builder.setNegativeButton("取消", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    builder.setPositiveButton("确定", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    final AlertDialog dialog = builder.create();
    **//在dialog  show方法之前添加如下代码,表示该dialog是一个系统的dialog**
    dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
    new Thread(){
        public void run() {
            SystemClock.sleep(4000);
            hanlder.post(new Runnable() {
                @Override
                public void run() {
                    dialog.show();
                }
            });
            };
    }.start();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值