Solo  当前访客:0 开始使用

yfd🌕

用心工作,用爱生活。
浏览数: 17976    文章总数: 188   

Kotlin安卓开发:notification通知的适配

最近一直在学习Kotlin桌面端框架TornadoFx的使用,没怎么写笔记了,使用kotlin开发桌面应用很棒啊,有空一定写个记录,其中还有JavaFx的Jfoenix的Material设计的UI库在TornadoFx简直无缝使用。哈哈。

进入正题,在社区看到有人说有没有锁屏备忘录的应用,就花点时间写了个android的。

然后遇到了:android8.0的通知适配,主要是通知的通道与分组,前者控制在高版本设备上是否显示通知,后者控制如果来自一个应用超过三个通知,会折叠,我们要把这个折叠禁止,最后就是如何保持Service一直不被后台清理。

首先我们先创建一个通知管理:判断版本记得,低版本的设备不需要channelId,这是新版本的规定,必须设置通道ID,这里我设置了三个不同的Id,为了后面不被折叠。

  mNm = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            mNm.createNotificationChannels(listOf(  NotificationChannel(
                "lockTodo1",
                "Todo1",
                NotificationManager.IMPORTANCE_HIGH
            ),  NotificationChannel(
                "lockTodo2",
                "Todo2",
                NotificationManager.IMPORTANCE_HIGH
            ),  NotificationChannel(
                "lockTodo3",
                "Todo3",
                NotificationManager.IMPORTANCE_HIGH
            ),  NotificationChannel(
                "notifyTodo",
                "TodoTop",
                NotificationManager.IMPORTANCE_HIGH
            )))
        }

null

然后我们创建一个通知看看:注意看setGroupSummary我们设置为False就不会折叠了。

设置显示等级:visibility这里可以设置是否锁屏显示。

   val notifyBuild = NotificationCompat.Builder(this@LightService, "lockTodo${i.key}")
                                        //设置通知标题
                                        .setContentTitle("${todoList["${i.key.toInt() - 1 }"]?:"默认todo"}")
                                        //设置通知内容
                                       // .setContentText("请继续保持哦!")
                                        .setAutoCancel(true)
                                        .setGroup("todos")
                                        .setGroupSummary(false)
                                        .setContentIntent(pi)
                                        .setLargeIcon(BitmapFactory.decodeResource(context?.resources,R.drawable.notify))
                                        .setSmallIcon(R.drawable.launch)
                                        .setShowWhen(true).build().apply {
                                            visibility = Notification.VISIBILITY_PUBLIC
                                        }

null

然后我们发出这个通知:第一个是通知id和通道id不一样的注意!

 mNm.notify(500.plus(i.key.toInt()), notifyBuild)

null

然后就是通知一般我们都是service发出的,如何保持service一直运行呢

1.提高service优先级

2.从最近任务列表移除应用,防止主程序被杀掉

在主activity设置

 android:excludeFromRecents="true"

null

3.开启前台通知(目前这个可以保持非常久,基本就是可见应用状态了,优先级很高)

这里开启前台服务,通知会一直出现在状态上,比如显示xx正在运行,你可以自定义的,修改notification内容就不写了。

  startForeground(0x11,notifyBuildPre)

null

还有权限:

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

null

null

酷安传送门:锁屏备忘录


标题:Kotlin安卓开发:notification通知的适配
作者:yf_d
地址:看看我的CSDN

公告

今日诗词
微信:tel322ecdb2d