美文网首页
Service中弹出Dialog的实现

Service中弹出Dialog的实现

作者: 沐络 | 来源:发表于2019-07-18 11:09 被阅读0次

因为Android中的Service的运行时没有界面不可见的,所以要在Service中弹框需要,稍加处理:

1,在配置清单中添加权限

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

2. AlertDialog.Builder builder = new AlertDialog.Builder(this)

.setTitle(getString(R.string.title_text_prompt))

                .setMessage("你的权限太低暂不支持,暂不支持!")

.setPositiveButton(getString(R.string.confirm),null);

        AlertDialog alertDialog = builder.create();

        int type;

        if (Build.VERSION.SDK_INT > 24){

            type= WindowManager.LayoutParams.TYPE_PHONE;

        }else if (Build.VERSION.SDK_INT>18){

            type= WindowManager.LayoutParams.TYPE_TOAST;

        }else{

            type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

        }

        alertDialog.getWindow().setType(type);

        alertDialog.show();

由于android版本的限制,在不同的版本中,需要设置不同的Type,省略申请权限的过程

如果想在Service中弹出toast,需要handler的配合,使用如下:

new Handler(new Runnable(){

        public void run(){

            Toast.makeText().show();

    }

});

android中时长会使用到悬浮窗相关View,使用时,需要设置WindowManager.LayoutParams 的type类型

1,android4.4之前,如果悬浮窗没有单击事件,则设置type为TYPE_TOAST,反之,需要在配置文件中添加android.permission.SYSTEM_ALERT_WINDOW 并设置Type为TYPE_SYSTEM_ALERT

2,android5.0后,由于谷歌对做了权限的相关调整,可以直接设置TYPE_TOAST 即可满足正常需求(有单击事件),如果需要设置Type类型为TYPE_SYSTEM_ALERT 时,则需要申请System overlay view权限

3,android 7.0后 需要设置Type为TYPE_PHONE,为TYPE_TOAST则很快消失,也可以通过动态权限申请System overlay view的权限实现

相关文章

网友评论

      本文标题:Service中弹出Dialog的实现

      本文链接:https://www.haomeiwen.com/subject/kbbklctx.html