android service Dialog 弹出框

android service Dialog 弹出框

  相信大家第一次在Service中实现 AlertDialog 弹出框时,都会遇到应用闪退然后报出这个异常:

Caused by: android.view.WindowManager$BadTokenException:

  下面说下为什么出现这个异常,原因很简单,是由于 AlertDialog 的显示是依赖于一个确定的Activity类,所以要想在 Service 中实现弹出来,需要做如下配置:

1、安装常规写好 AlertDialog 功能块后,在alertObj .show()语句前加入:

  alertObj.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

  例如:

  private void showHostOnlineAlert(){
        final AlertDialog dialog =new AlertDialog.Builder(BackgroudService.this).create();
        dialog.setCanceledOnTouchOutside(false);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//set background was transparent
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//需要添加的语句
        dialog.show();
    }

2、在AndroidManifest.xml中加入权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>

总结:以上做法就是声明我们要弹出的这个提示框是一个系统的提示框,即全局性质的提示框,所以只要手机处于开机状态,无论它现在处于何种界面之下,只要调用alterObj.show(),就会弹出提示框来。

时间: 2024-11-01 12:09:09

android service Dialog 弹出框的相关文章

Android 关于Dialog弹出框

直接上效果图: 实现步骤: 1.主界面activity_main.xml很简单,一个按钮 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_heig

Android自定义控件:可复用的Dialog弹出框

最近帮工作室改一个项目,需求是制作许多单选.多选的Dialog弹出框,我感觉有许多代码都是可重用的,就写了个可重用的Dialog类,废话不多说,先看图: 由于一些和谐的原因,实际效果肯定是比这个好看的,这里基本上都是原生属性修改--简单讲一下设计思路吧: 为什么选择自定义DIalog子类而不是AlertDialog子类(或者其他)? Dialog子类是诸如AlertDialog子类等的父类,其可自定义范围更广(因为被设计的子类属性.方法等更少,同时又具备必要的属性和方法),其次就是,有些子类的设

Android窗口为弹出框样式

1.XML android:theme="@android:style/Theme.Dialog <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.fish.helloworld" android:versio

android 三种弹出框之一poprpWindow

poprpWindow 在android的弹出框我目前了解到的是有三种:AlertDialog,poprpWindow,Activity伪弹框, AlertDialog太熟悉了,这里就不介绍了 就先看看poprpWindow API 给出的解释是: 意思就是一个展示view的弹出窗体,这个弹出窗体将会浮动在当前activity的最上层, 它和AlertDialog的区别是:在android中弹出框有两种方式:AlertDialog和PopupWindow,它们的不同点在于:      1.Ale

dialog弹出框 点击周围空白处弹出层不自动消失

dialog.setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失 dialog弹出框 点击周围空白处弹出层不自动消失

使用easeui dialog弹出框中使用CKeditor多次加载后无法编辑问题

问题呈现:弹出框页面 <tr class="addtr"> <th>内容</th> <td> <!-- <textarea rows="15" cols="50" id="content" name="content" class="ckeditor">请输入.</textarea> --> <te

dialog弹出框,自定义里面的布局;

//代码里面的设置,点击触发弹出对话框: case R.id.re_ps: // 配送费 final Dialog dialog1 = new Dialog(this); View contentView1 = LayoutInflater.from(this).inflate( R.layout.activity_send_peisong, null); dialog1.setContentView(contentView1); dialog1.setTitle("配送费用"); d

Android 大约Dialog弹出窗口

直接效果图: 实现步骤: 1.主界面activity_main.xml非常easy,一个button <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layou

android service 如何弹出dialog

在service中弹出toast,需要使用handler, 1 handler.post(new Runnable() { 2 @Override 3 public void run() { 4 Toast.makeText(this, "重启服务", 1).show(); 5 } 6 }); 在service中弹出dialog,写着跟activity同样代码会报错. 因为这个dialog显示时是需要依赖一个activity,如何需要在service中显示需要把dialog设置成一个系