Android8.0通知栏和悬浮窗新改动
Android8.0通知栏和悬浮窗新改动
通知栏
//通知渠道的id
Stringid="my_channel_01";
//⽤户可以看到的通知渠道的名字.
CharSequencename=getString(l_name);
//⽤户可以看到的通知渠道的描述
Stringdescription=getString(l_description);
intimportance=ANCE_HIGH;
//注意Name和description不能为null或者""
Notification领导生日祝福 ChannelmChannel=newNotificationChannel(id,name,importance);
//配置通知渠道的属性
cription(description);
//设置通知出现时的闪灯(如果an批语 droid设备⽀持的话)
Lights(true);
htColor();
//设置通知出现时的震动(如果android设备⽀持的话)
Vibration(true);
rationPattern(newlong[]{100梦见小象 ,200,300,400,500,400,300,200,400});
//最后在notificationmanager中创建该通知渠道NotificationChannel(mChannel);
nnelId(id);
展⽰⼀个简单的通知栏的完整代码:
NotificationManagernotificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
rbuilder=r(licationContex辣炒螃蟹 t());
if(_INT>=N_CODES.O){
//通知渠道的id
Stringid="my_channel_01";
//⽤户可以看到的通知渠道的名字.
CharSequencename=getString(l_name);
//⽤户可以看到的通知渠道的描述
Stringdescription=getString(l_description);
intimportance=ANCE_HIGH;
//注意Name和description不能为null或者""
NotificationChannelmChannel=newNotificationChannel(id,name,importance);
//配置通知渠道的属性
cription(description);
//设置通知出现时的闪灯(如果android设备⽀持的话)
Lights(fal);
htColor();
//设置通知出现时的震动(如果android设备⽀持的话)
Vibration(fal);
rationPattern(newlong[]{100,200,300,400,500,400,300,200,400});
//最后在notificationmanager中创建该通知渠道
NotificationChannel(mChannel);
nnelId(id);
}
tentInfo("补充内容");
tentText("通知标题");
tentTitle("通知内容");
llIcon();
ker("新消息");
oCancel(true);
n(tTimeMillis());
Intentintent=newIntent(this,);
PendingIntentpendingIntent=ivity(this,0,intent,_CANCEL_CURRENT);
tentIntent(pendingIntent);
Notificationnotification=();
(1,notification);
悬浮窗
如果你的项⽬targetSdkVersion是在23及以上,在Android6.0以上的⼿机想要实现悬浮窗这个功能就必须要加⼊
_ALERT_WINDOW这个权限,并且通过Android6.0后提供的权限申请⽅法来申请权限成功后再实现悬浮窗功能。
当然国产某些Rom也会导致虽然targetSdkVersion低于23或者系统低于6.0,但还是需要SYSTEM_ALERT_WINDOW权限才能调⽤悬浮窗。
这⾥我就不详讲低于Android8.0的⼿机怎么去申请悬浮窗权限了,⼤家可以参考下Android悬浮窗权限适配来实现悬浮窗的权限适配。
相信的⼤家在完成上史记中的人物 述权限适配后会发现基本在各种⼿机都会运⾏都能顺利申请到悬浮窗权限并且展⽰⾃⼰的悬浮窗,但却在8.0上发现运⾏悬浮
窗会报出以下的Crash:
//xxxx为你选择Params()的具体参数
W/:Manager$BadTokenException:otImpl$W@b5ad7ed--permissiondeniedforwindowtypex
W/:w(:788)
W/:w(:356)
W/:w(:92)
...
为什么明明权限已经申请成功,在低版本的⼿机上会运⾏的好好的,在Android8.0上会这样呢?
原来是因为8.0新增了⼀些⾏为变更Android8.0⾏为变更,对悬浮窗进⾏了⼀些限制:
提醒窗⼝
使⽤SYSTEM_ALERT_WINDOW权限的应⽤⽆法再使⽤以下窗⼝类型来在其他应⽤和系统窗⼝上⽅显⽰提醒窗⼝:
TYPE_PHONE
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_SYSTEM_OVERLAY
TYPE_SYSTEM_ERROR
相反,应⽤必须使⽤名为TYPE_APPLICATION_OVERLAY的新窗⼝类型。
使⽤TYPE_APPLICATION_OVERLAY窗⼝类型显⽰应⽤的提醒窗⼝时,请记住新窗⼝类型的以下特性:
应⽤的提醒窗⼝始终显⽰在状态栏和输⼊法等关键系统窗⼝的下⾯。
系统可以移动使⽤TYPE_APPLICATION_OVERLAY窗⼝类型的窗⼝或调整其⼤⼩,以改善屏幕显⽰效果。
通过打开通知栏,⽤户可以访问设置来阻⽌应⽤显⽰使⽤TYPE_APPLICATION_OVERLAY窗⼝类型显⽰的提醒窗⼝。
所以我们只需要在为Params()设置type的时候改为:
if(_INT>大学推荐书籍 =N_CODES.O){
=_APPLICATION_OVERLAY;
}el{
//xxxx为你原来给低版本设猪小屁头像 置的Type
=;
}
这样就可以适配到8.0的⼿机上使⽤悬浮窗功能啦~
具体详细原理在⽇后有时间再补上,⽬前先写到这⾥。
本文发布于:2023-03-22 15:36:45,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/7412cfcd706eefb219bf26a7258d0361.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:通知栏.doc
本文 PDF 下载地址:通知栏.pdf
留言与评论(共有 0 条评论) |