Android Notification使用


一 Android的Notification

Notification是安卓中用来通知、提示用户的一种机制.

二 Notification的类别

1.状态栏和抽屉式通知

  //获取NotificationManager对象
  val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager

  val intent = Intent(NotificationActivity@this,MainActivity::class.java)
  //PendingIntent.FLAG_ONE_SHOT 多次创建也只能使用一次
  val pendingIntent = PendingIntent.getActivity(NotificationActivity@this,0,intent,PendingIntent.FLAG_ONE_SHOT)

  //通道id 该id需要和创建NotificationChannel指定的id一致
  val channelId = "komine.demos.app"

  //创建Notification对象
  val notification = Notification.Builder(NotificationActivity@this,channelId) //channelId 
            //通知的文字内容
            .setContentTitle("NotificationContentTitle") 
            //通知的正文内容
	    .setContentText("NotificationContent") 
            //Android8.0+提供的badge通知数字,默认只会显示一个圆点,需要长按应用图标才能看到设置的数字
            .setNumber(39) 
            //pendingIntent 提供点击通知之后执行的动作,比如打开一个Activity
            .setContentIntent(pendingIntent) 
            //设置通知左上角显示的图标,该图标不能太大,否则不正常显示,而且要是纯色的
            .setSmallIcon(R.mipmap.notification) 
            //通知的大图标
            .setLargeIcon(BitmapFactory.decodeResource(resources,R.mipmap.ic_launcher)) 
	    //.setContent() //已过时,换成setCustomContentView() 设置自定义的布局View
            //设置自定义布局
	    .setCustomContentView() 
            ////设置为true,当用户点击的时候自动消失
	    .setAutoCancel(false) 
            //设置左上角图片的颜色 即setSmallIcon图片的颜色
	    .setColor(Color.RED) 
	    //可以理解为内容的样式,比如要放一张图片,一段文字或者媒体播放控制等,效果见下图
	    .setStyle(Notification.BigPictureStyle().bigPicture(bitmap)) 
            //显示一个进度条,参数1:最大值,参数2:当前进度,参数3:循环效果
	    .setProgress(100,39,false) 
            .build()

  //如果运行在Android8.0+ 需要指定NotificationChannel,并且在Notification.Builder中指定指定channelId
  if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
        //在8.0+需要创建一个通知渠道,才能发送通知
        val notificationChannel = NotificationChannel(channelId,"一般通知",NotificationManager.IMPORTANCE_HIGH)
        notificationManager.createNotificationChannel(notificationChannel)
  }

  //最后调用notify方法显示通知 参数一:tag可以随便填,参数二:通知的重要级别,参数三:Notification对象
  notificationManager.notify("",NotificationManager.IMPORTANCE_NONE,notification)

  .setProgress(100,39,false)

  .setProgress(100,39,true)

  .setNumber(39)

  .setColor(Color.RED)

  .setStyle(Notification.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(resources,R.mipmap.miku)))

  .setStyle(Notification.BigTextStyle().bigText("这是一段很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的文字"))

2.提醒式通知/顶部悬浮通知

跟一般通知的用法一致

Android8.0+ 在创建NotificationChannel的时候指定为 NotificationManager.IMPORTANCE_HIGH

  val notificationChannel = NotificationChannel(channelId,"一般通知",NotificationManager.IMPORTANCE_HIGH)

Android8.0以下

  .setFullScreenIntent(pendingIntent,true) 
  //或者在显示对话框的时候指定,8.0+必须在NotificationChannel指定
  notificationManager.notify("",NotificationManager.IMPORTANCE_HIGH,notification)