在Android中简单使用消息通知

2023-10-31

发送通知

消息通知可以在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方法添加显示一段文本,一个大图片,这样就可以使构建富文本了,像这样。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Android中简单使用消息通知 的相关文章

  • 将项目升级到Android Studio 1.0(Gradle问题)

    首先 我对 android 开发 android studio gradle 非常陌生 所以如果我问了一个愚蠢的问题 请原谅我 我的团队一直在使用 android studio 的 beta 版本开发一个项目 我刚刚安装了新版本 1 0 并
  • Flutter 中的 AndroidManifest 中缺少默认通知通道元数据

    我在用firebase messaging 5 0 1软件包来实现推送通知 在 IOS 中一切正常 而在 Android 中 当我的移动应用程序在后台运行时 我收到通知 但它没有导航到相应的屏幕 它只是打开默认屏幕 如何实现到该特定屏幕的导
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 使用 dpi 与 dp 缩放图像之间的差异

    我拥有所有由九个补丁位图组成的 dpi 可绘制目录 xxhdpi 和 xxxhdpi 是否必要 可绘制目录中的可绘制资源文件可检索所有缩放的位图 并且我使用可绘制资源文件 现在 我的问题是我还根据大小 小 正常等 创建了 缩放 布局目录 其
  • Android 应用程序在启动时打开应用程序信息屏幕,而不是启动主 Activity

    我不确定这是否是一个问题 但这是我第一次遇到这个问题 我正在开发一个应用程序 当我在进行一些编码后断开应用程序与 Android Studio 和 PC 的连接时 如果我尝试在手机上打开应用程序 它会启动app info屏幕 我们看到强制停
  • 从 arraylist 和 hashmap 中删除重复项

    我有一个数组列表 其中包含付款人的姓名 另一个数组列表包含每次付款的费用 例如 nameArray 尼古拉 劳尔 洛伦佐 劳尔 劳尔 洛伦佐 尼古拉 价格数组 24 12 22 18 5 8 1 我需要将每个人的费用相加 所以数组必须变成
  • 导入已经创建的sqlite数据库(xamarin)

    我正在使用 Xamarin 想知道如何导入我已经创建的 sqlite 数据库 到目前为止 我已将其添加到资产文件夹中 但不知道下一步从哪里开始 string localPath Path Combine System Environment
  • 如何在 android 中启动“添加联系人”活动

    您能告诉我如何在 Android 中启动 添加联系人 活动吗 谢谢 API 级别 5 及以上解决方案 Add listener so your activity gets called back upon completion of act
  • onScale 事件后触发奇怪的 onScroll 事件

    我有一个同时使用 SimpleOnScaleGestureListener 和 SimpleOnGestureListener 的应用程序 每当我进行捏缩放时 我都会得到预期的 onScale 但是当我抬起时 我会看到一个奇怪的 onScr
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • 如何向开发人员发送崩溃报告?

    我开发 Android 应用程序 但在某些情况下我的应用程序force close 如果出现以下情况 我如何向开发人员发送包含详细信息的电子邮件force close随时发生 The ACRA https github com ACRA a
  • Android中如何检测WIFI连接何时建立?

    我需要检测何时通过 WIFI 建立网络连接 发送什么广播来确定已建立有效的网络连接 我需要验证是否存在有效的 HTTP 网络连接 我应该监听什么以及需要进行哪些额外测试才能知道是否存在有效连接 您可以注册一个BroadcastReceive
  • 像 WhatsApp 一样发送图片

    我做了一个聊天应用程序 我想添加照片 文件共享我的应用程序中的概念与 WhatsApp 相同 我已经使用该应用程序制作了Xmpp Openfire目前我正在使用此功能进行照片共享 但它并不完全可靠 public void sendFile
  • android textview 有字符限制吗?

    我正在尝试在 android TextView 中输入超过 2000 3000 个字符 它不显示任何内容 任何一份指南是否对 android textview 有字符限制或什么 我在G3中做了一些小测试 我发现 如果activtiy布局中有
  • 剪切评级栏中的图像

    我制作了自己的评级栏 花朵图像有 4 种尺寸 xdpi hdpi 等 从 24px24px 到 64x64px
  • Android 地理围栏无法正常工作(未调用 IntentService)

    这是我的代码 安卓清单
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • 使用Intent拨打电话需要权限吗?

    在我的一个应用程序中 我使用以下代码来拨打电话 Intent intent new Intent Intent ACTION CALL Uri parse startActivity intent 文档说我确实需要以下清单许可才能这样做

随机推荐

  • 计算机课代表专业演讲稿,信息课代表演讲稿

    信息课代表演讲稿 由会员分享 可在线阅读 更多相关 信息课代表演讲稿 2页珍藏版 请在人人文库网上搜索 1 信息课代表演讲稿今天 很荣幸走上讲台 和那么多乐意为班级作贡献的同学一道 竞选班委 我为此竞选的是信息课代表 我想 我将用旺盛的精力
  • C++学习 类的分文件实现

    mian cpp测试文件 include
  • 【数据库】NoSQL数据库简介

    基于自己的理解 对几个常见的NoSQL数据库进行一下简单介绍 如有描述错误的 欢迎指正 一 数据库分类 数据库分两大类 SQL数据库和NoSQL数据库 SQL数据库 常用的有 Mysql Oracle MSSQL DB2等 这些大家应该都比
  • $.each()方法的使用

    jQuery中 each 方法的使用 each 是对数组 json和dom结构等的遍历 说一下他的使用方法吧 1 遍历一维数组 var arr1 aa bb cc dd each arr1 function i val 两个参数 第一个参数
  • 【AAAI 2021】多出口架构的知识蒸馏:Harmonized Dense Knowledge Distillation Training for Multi-Exit Architectures

    AAAI 2021 多出口架构的知识蒸馏 Harmonized Dense Knowledge Distillation Training for Multi Exit Architectures 论文地址 主要问题 主要思路 多出口网络
  • Java 面向对象之封装

    目录 1 类和对象 2 单个对象内存图 3 两个对象内存图 4 两个引用指向同一对象内存图 5 成员变量和局部变量 6 private 关键字 7 this 关键字 8 this 内存原理 9 封装 10 构造方法 面向过程编程 POP P
  • sqli-labs-master【Less-11/12/13/14/15/16】

    Less 11 进入Less 11之后 可以看到是全新的关卡 是一个表单的形式 需要我们填入用户名和密码才可以提交 首先我们随便填入一个用户名和密码看页面会回显给我们什么内容 我在这块用户名和密码都输入的是123 可以看到登陆尝试失败 不过
  • java中steam流的使用

    1 数组合并 原始合并 定义俩个集合合并为一个集合 例子 public class 测试 把小王合道 list中 public static void main String args throws Exception final Arra
  • 华为机试——0-1背包问题

    华为机试 0 1背包问题 给定一个数 比如20 然后给定几个数字 如1 3 5 7 8 输出 1 3 5 7 8 0 0 0 1 1 因为5 7 8 20 include
  • Qt实现窗口整体拖拽功能.

    我们都知道 当我们鼠标点击并移动应用程序的上边框时 窗口才会整体移动 但有些窗口 你点击移动其他部分 也可以让窗口跟着鼠标移动 这里就教你如何整体移动窗口 其实实现这样的功能很简单 只需要重写以下的3个鼠标函数即可 c h ifndef C
  • 数据挖掘案例

    图中的左边是SPSS在1999年提出的 跨行业数据挖掘标准流程 在图中定义了数据挖掘的6个步骤 虽然这个图已经提出有10几年了 但是在大数据环境下 这个流程依然适用 1 理解商业问题 这需要大数据科学家和行业专业 以及客户的业务专家一起来明
  • win7系统开机直接进bios 不能正常启动,插u盘可以启动

    朋友的win7系统笔记本电脑出问题了 拿来帮忙看看 现象 开机后直接进bios界面 插个u盘就能正常进硬盘的windows系统 分析 以为是开机启动项不对 进bios界面 选择硬盘优先启动 保存退出 重启后并不能进系统 还是进bios 尝试
  • 使用tf2的saved_model进行推理

    import tensorflow as tf import cv2 from PIL import Image import numpy as np import colorsys import os import matplotlib
  • 蓝桥杯官网练习题(谈判)

    题目描述 在很久很久以前 有 n 个部落居住在平原上 依次编号为 1 到 n 第 i 个部落的人数为 ti 有一年发生了灾荒 年轻的政治家小蓝想要说服所有部落一同应对灾荒 他能通过谈判来说服部落进行联合 每次谈判 小蓝只能邀请两个部落参加
  • 测试集数据语义特征t_SNE降维可视化

    在图像分类通用步骤中 第一步是训练数据集 第二步是测试数据集 而无论是训练还是测试 对我们而言都是黑盒子 我们只知道模型从训练数据中学习到了特征 然后应用到测试集数据集中 最终得出测试集数据的分类结果 对于其中的细节 我们就不得而知了 因此
  • 人工智能(python)开发——Linux环境基本知识要点

    1 终端工具 打开方法 1 点击左侧图标 2 点击 搜索计算机 终端图标上方 输入 gnome terminal 终端 3 快捷键 Ctrl shift t 退出方法 1 exit lt 回车 gt 2 ctrl d 3 点击左上角x 2
  • 【电路设计】将AC交流电转换为DC直流电

    文章传送门 前言 一 直流 AC 与交流 DC 的区别 二 转换步骤 降压 整流 滤波 稳压 1 整流 交流电 直流电 2 滤波 滤除脉动直流的交流部分 3 稳压 稳定到需要的电压值 三 简单分辨直流电与交流电 前言 日常生活中用到的都是2
  • ubuntu的tmp目录下自己创建的文件每次重启后自动删除

    ubuntu的tmp目录下自己创建的文件每次重启后自动删除 可以修该 etc default rcS文件中的内容而改变为不自动删除 输入命令 vim etc default rcS 开始编辑 将TMPTIME 0改为TMPTIME 1 保存
  • 快速排序——C++实现

    快速排序采用 分治法 首先选取一个 轴值 假设数据中有k个数小于轴值 那么这k个数放在数组最左边的k个位置上 而不小于k的数放在数组右边的n k个位置上 这就实现了数组的一个 分割 给定分割中的值不必排序 只要求所有结点都被轴值正确分割 快
  • 在Android中简单使用消息通知

    发送通知 消息通知可以在Activity BroadcastReceiver service中创建 但是无论在哪创建 整体步骤基本一样 Android中使用通知渠道来开启通知功能 通知渠道一旦设定就不能再更改 所以创建通知渠道的时候最好进行