您的位置:首页 > 其它

如何在service中弹出dialog

2014-04-16 10:38 113 查看
我们都知道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同样的代码时会报错



因为这个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();
}


声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

原文作者: 皇马船长

原文地址: http://my.eoe.cn/cainiao1/archive/2345.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: