在Android中简单使用消息通知

发送通知

消息通知可以在Activity、BroadcastReceiver、service中创建,但是无论在哪创建,整体步骤基本一样。Android中使用通知渠道来开启通知功能,通知渠道一旦设定就不能再更改,所以创建通知渠道的时候最好进行仔细的分类。在创建好渠道之后,Notification就通过渠道进行发送。在Android中使用通知一般分为四个步骤。

第一步,创建渠道并创建NotificationManager以管理通知渠道。

此处的as是强制类型转换。因为Android8.0才新增通知功能,所以要进行版本判断, Build.VERSION_CODES.O代表了Android8.0版本,创建channel的NotificationChannel方法传入了三个参数,分别是channelId(渠道ID,随便写,只要唯一就行)、channelName(渠道名称,给用户看的,随便写,用户能看懂就行)、importance(重要程度,谨慎使用,以骚扰用户,主要有IMPORTANCE_HIGH、IMPORTANCE_DEFAULT、IMPORTANCE_LOW、IMPORTANCE_MIN这几种,不同等级的消息会以不同的形式推送给用户),然后把这个渠道添加到manager中方便管理。

val manager=getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
   if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            val channel=NotificationChannel(channelId,channelName,importance)
            manager.createNotificationChannel(channel)
     }

第二步,使用一个Builder构造器来创建一个Notification对象,这里我们选择NotificationCompat类的构造器来创建对象。

这个构造器需要两个参数context(上下文)、channelId(渠道ID,要跟上面的一致,不然不知道通过哪个渠道发送),最后调用build方法创建。

val notification=NotificationCompat.Builder(context,channelId).build()

第三步,在执行Notification对象的build方法之前对通知的内容进行补充,以丰富通知消息。

填充消息内容,丰富通知内容,可以设置标题、文本内容、状态栏显示图标、下拉通知栏图标、最后调用build方法完成创建。

val notification=NotificationCompat.Builder(context,channelId)
            .setContentTitle("this is a notification")
            .setContentText("this is text")
            .setSmallIcon(R.drawable.small_icon)
            .setLargeIcon(BitmapFactory.decodeResource(resources,R.drawable.Large_icon))
            .build()
        }

第四步,激活通知消息。

使用manager的notify方法激活消息即可发送。该方法需要两个参数,此处 1 (代表消息ID,随便写,唯一就行),notification就是我们上面写的那个通知消息

manager.notify(1,notification)

点击通知进入页面

要实现点击消息进入某个页面的功能还要用到PendingIntent。它和Intent类似,只是intent是立即执行,而PendingIntent是在合适的时机执行。我们使用PendingIntent的getActivity方法来完成点击传送事件,该方法有四个参数,第一个参数是上下文、第二个(我也不知道是啥,一般用不到,传入0就行),第三个是我们构建的Intent,第四个用于PendingIntent的行为有4种值,具体用到的时候可以在文档中查看,一般传0就行。在消息中加上.setContextIntent(pi)将该事件写到消息中,当点击之后,就会传送到我们Intent引导的页面中去。然后在加上.setAutoCancel(true),使消息被点击之后能够自动消失。

val intent=Intent(this,NotificationActivity::class.java)
val pi=PendingIntent.getActivity(this,0,intent,0)
val notification=NotificationCompat.Builder(context,channelId)
            .setContentTitle("this is a notification")
            .setContentText("this is text")
            .setSmallIcon(R.drawable.small_icon)
            .setLargeIcon(BitmapFactory.decodeResource(resources,R.drawable.Large_icon))
            .setContextIntent(pi)
            .setAutoCancel(true)
            .build()
        }

构建富文本消息通知

这就需要用到setStyle方法了。

val intent=Intent(this,NotificationActivity::class.java)
val pi=PendingIntent.getActivity(this,0,intent,0)
val notification=NotificationCompat.Builder(context,channelId)
    .setContentTitle("this is a notification")
    .setContentText("this is text")
    .setSmallIcon(R.drawable.small_icon)
    .setLargeIcon(BitmapFactory.decodeResource(resources,R.drawable.Large_icon))
    .setContextIntent(pi)
    .setAutoCancel(true)
    .setStyle(NotificationCompat.BigTextStyle().bigText("Learn how to build notifications, send and sync data, and use voice actions. Get the official Android IDE and developer tools to build apps for Android."))
    .setStyle(NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(resources, R.drawable.big_image)))
    .build()
}

在build方法之前使用setStyle方法添加显示一段文本,一个大图片,这样就可以使构建富文本了,像这样。

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android消息通知是一种系统功能,它允许应用程序向用户发送各种类型的通知信息,包括文本消息、图像、声音等。通过消息通知,应用程序可以在后台向用户展示重要的信息,无需用户主动打开应用程序。 Android消息通知可以通过NotificationManager类来实现。具体步骤如下: 1. 创建一个NotificationCompat.Builder对象,用于构建通知。 2. 设置通知的标题、内容、图标等信息。 3. 定义通知的行为,比如点击通知后的跳转行为。 4. 调用NotificationManager的notify方法,发送通知。 以下是一个简单的示例代码: ```java // 创建通知 NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("通知标题") .setContentText("通知内容") .setPriority(NotificationCompat.PRIORITY_DEFAULT); // 定义点击通知后的跳转行为 Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); // 发送通知 NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(notificationId, builder.build()); ``` 需要注意的是,为了确保通知能够正常显示,需要在AndroidManifest.xml文件声明相关权限和通知渠道。 希望以上信息对你有所帮助!如果有更多问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值