zoukankan      html  css  js  c++  java
  • Android 8悬浮窗适配

    背景

    APP推出时,提示是退出还是更改账号,这个提示框是系统级别的。然而我的Android 9 会崩溃,宁外一个小伙伴Android 7运行理想。报错提示permission denied for window type 2038,意思就是没有赋予权限,但是打开权限管理,也确实给了权限。

    原因

    在新建这个Dialog时调用了mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    然而在Android 8以后,需要做新的设置,在Android 8 API中新增了一种悬浮窗类型TYPE_APPLICATION_OVERLAY, 如果使用了SYSTEM_ALERT_WINDOW,并且尝试使用以下类型的提示窗:

    TYPE_PHONE 
    TYPE_PRIORITY_PHONE 
    TYPE_SYSTEM_ALERT
    TYPE_SYSTEM_OVERLAY 
    TYPE_SYSTEM_ERROR 
    TYPE_TOAST
    

    是需要更改上面的setType函数的参数的!

    解决

    // 设置该Dialog为系统级别的
    if(Build.VERSION.SDK_INT >= 26) {
       mDialog.getWindow().setType(
                        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
     }else {
       mDialog.getWindow().setType(
                        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
     }
    

    后话

    还记得去年做APP的通知时,也是因为在Android 8 之后,通道必须设定通知渠道Channel!每个版本都有不同,糟心。昨天hw面试,第二轮面试官叫我画Android framework的结构图,问我Android怎么管理包,怎么管理进程等等,我一直懵逼,看得出来,我于他而言真的只是个低级程序员,他有句话这样说的:你不懂底层,不懂原理,你写的东西只是能用,那就是为了能用而用;——虽然当时心里不是很舒服,还责怪说我一个应届生,是不是要求很过了,但是讲实话,没有去搞懂什么原理,写代码真的是为了能用而写,他还说Android是不断更新的,你不去关注,那写不出好代码,今天这个就算是一个没有写好的代码吧!
    虽然面试官很不屑,不过还好,目前录用排序中,说明面试没有直接挂掉,

    最后

    此致,敬礼

  • 相关阅读:
    silverlight 调用默认打印机
    拿来主意
    关于js智能提示的封装(修订版)
    silverlight 获取文本框焦点
    silverlight Timer
    winform 中写app.config文件时 调试情况下没有改变的原因
    关于asp:GridView和dx:ASPxGridView固定表头的jquery代码封装
    Microsoft Visual Studio 2010的前世今生
    游戏开发之我见
    JS中数组去重
  • 原文地址:https://www.cnblogs.com/numen-fan/p/10727902.html
Copyright © 2011-2022 走看看