Android通知工具类,含8.0通知适配,打开通知设置页面适配( 二 )


通知渠道是在 8.0加入的 。如果有多个渠道,则在手机的通知管理中会显示出每个渠道的名称,并且可以对每个通知渠道进行单独的设置,比如开启或者关闭 。如果通知渠道只有一个,则不显示渠道名称 。如下图:
左侧是只有一个通知渠道显示的页面,右侧是有两个通知渠道显示的页面 。

Android通知工具类,含8.0通知适配,打开通知设置页面适配

文章插图
上图使用的是华为 8.0手机,不同厂商显示的可能不一样(华为手机系统比较接近原生)
annel方法的作用是创建通知渠道,渠道只能创建一次,即创建过后渠道名称不能再通过代码更改,除非是卸载APP重新安装,但是可以通过代码删除渠道,不过删除后,在手机的通知管理中会显示出已删除的渠道 。
建议在的方法中调用,eg:
package com.lct.customviewimport android.app.Applicationimport com.lct.customview.whole.AppNotification/*** Author:SkySmile* Date:2019/2/28* Description:Application*/class MyApplication : Application() {override fun onCreate() {super.onCreate()//创建影视通知渠道AppNotification.createNotificationChannel(this,AppNotification.mediaChannelId,AppNotification.mediaChannelName,AppNotification.mediaChannelImportance)//创建美食通知渠道AppNotification.createNotificationChannel(this,AppNotification.foodChannelId,AppNotification.foodChannelName,AppNotification.foodChannelImportance)}}
方法的作用是发送通知 。方法中首先判断了APP通知是否开启,没开启的话,则跳转到通知设置页面或APP详情页面引导用户开启通知权限 。其次判断了(8.0及以上系统)某个通知渠道是否被开启,没开启的话,则跳转到对应的通知渠道页面引导用户开启 。满足上述条件,则发送通知 。
Android通知工具类,含8.0通知适配,打开通知设置页面适配

文章插图
调用试例:
package com.lct.customviewimport android.app.PendingIntentimport android.content.Intentimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport com.lct.customview.whole.AppNotificationimport kotlinx.android.synthetic.main.activity_notification.*class NotificationActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_notification)btnMedia.setOnClickListener {val intent = Intent(this, MediaActivity::class.java)val pi = PendingIntent.getActivity(this, 0,intent, 0)AppNotification.sendNotification(this, AppNotification.mediaChannelId,"热门影视", "新版倚天屠龙记正式开播",R.mipmap.ic_launcher, R.drawable.ic_launcher_round, pi)}btnFood.setOnClickListener {val intent = Intent(this, MediaActivity::class.java)val pi = PendingIntent.getActivity(this, 0,intent, 0)AppNotification.sendNotification(this, AppNotification.foodChannelId,"露露鲜果", "新摘的大苹果,好吃实惠",R.mipmap.ic_launcher, R.mipmap.ic_launcher, pi)}}}
注意8.0及以上系统,不设置通知渠道的话,通知无法显示出来 。
其它方法代码中已明确注释,此处就不做解释了 。
参考博客:
【Android通知工具类,含8.0通知适配,打开通知设置页面适配】通知栏微技巧,8.0系统中通知栏的适配