Android中通知Notification的使用方法
作者:bingjianIT 发布时间:2023-10-17 22:06:17
每个使用Android手机的人应该对Android中的通知不陌生,下面我们就学习一下怎么使用Android中的通知。
一、通知的基本用法
活动、广播 * 和服务中都可以创建通知,由于我们一般在程序进入后台后才使用通知,所以真实场景中,一般很少在活动中创建通知。
1、第一行代码上面介绍的创建通知的方法
//获得通知管理器
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)
//创建通知对象,参数依次为通知图标、ticker(通知栏上一闪而过的信息)、通知创建时间
Notification notification = new Notification(R.drawable. ic_launcher, "This is ticker text", System.currentTimeMillis());
//设置通知布局,参数依次为Context,通知标题、通知正文、PindingIntent对象(点击通知之后的事件处理)
notification.setLatestEventInfo(this, "This is content title", "This is content text", null);
//显示通知,参数依次为唯一的id、通知对象
manager.notify(1, notification);
注:上面的方法现在已经被废弃,当API Level为11及之前时使用此方法
2、APILevel高于11低于16的可以用下面的方法创建通知
//1、获得通知管理器
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
//创建Builder,设置属性
Notification.Builder builder = new Notification.Builder(this)
.setAutoCancel(true)
.setContentTitle("title")
.setContentText("describe")
.setSmallIcon(R.drawable.ic_launcher)
.setWhen(System.currentTimeMillis())
.setOngoing(true);
//获得Notification对象
Notification notification = builder.getNotification();
//显示通知
manager.notify(1, notification);
3、API Level在16及以上,使用下面的方法创建通知
//1、获得通知管理器
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
//创建Builder,设置属性
Notification notification = new Notification.Builder(this)
.setAutoCancel(true)
.setContentTitle("title")
.setContentText("describe")
.setSmallIcon(R.drawable.ic_launcher)
.setWhen(System.currentTimeMillis())
.setOngoing(true)
.build();
//显示通知
manager.notify(1, notification);
二、响应通知的点击事件
我们通过 PendingIntent对象响应容通知的点击事件
1、获得PendingIntent对象
PendingIntent用来处理通知的“意图”。我们需要先构造一个Intent对象,然后再通过PendingIntent.getActivity()、PendingIntent.gBroadcast()、PendingIntent.getService()来启动执行不同的意图。这三个静态方法传入的参数相同,第一个为Context,第二个参数一般传入0,第三个参数为Intent对象,第四个参数指定PendingIntent的行为,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_ CURRENT这四种值可选。
2、设置PendingIntent
通过setContentIntent(pendingIntent)来设置。
下面是一个简单的例子
//获得通知管理器
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
//构造Intent对象
Intent intent = new Intent(MainActivity.this, TestActivity.class);
//获得PendingIntent对象
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
//创建Builder,设置属性
Notification notification = new Notification.Builder(this)
.setAutoCancel(true)
.setContentTitle("title")
.setContentText("describe")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pendingIntent) //设置PendingIntent
.setWhen(System.currentTimeMillis())
.setOngoing(true)
.build();
//显示通知
manager.notify(1, notification);
三、取消通知
取消通知只需要在cancel()方法中传入我们创建通知时指定的id即可
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(1);
四、通知的高级用法
1、通知到来时播放音频
Notification有一个属性是sound,这里需要传入音频对应的URI
//音频Uri
Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones"));
setSound(soundUri);
2、通知到来时手机振动
我们使用vibrate这个属性让通知到来时控制手机振动。vibrate需要一个长整型数组,用于设置手机静止和振动的时长,单位为毫秒。下标为偶数的表示手机静止的时长,下标为奇数为手机振动的时长。
//手机振动静止设置(静止0秒,振动一秒,静止一秒,振动一秒)
long[] vibrate = {0, 1000, 1000, 1000};
setVibrate(vibrate)
注:控制手机还需要在AndroidManifest.xml中声明权限:
<uses-permission android:name="android.permission.VIBRATE"/>
3、通知到来时闪烁LED灯
LED灯的使用涉及到以下一个属性:
ledARGB ——- 控制LED灯的颜色
ledOnMS ——- 控制LED灯亮起的时间,以毫秒为单位
ledOffMS ——– 控制LED灯熄灭的时间,以毫秒为单位
主要通过setLights()方法依次对这三个属性进行设置
setLights(Color.BLUE, 1000, 1000)
上面的代码就是让LED灯以蓝色一闪一闪
4、通知到来时以默认方式提醒
如果我们不想手动设置这么多属性,可以使用下面的方式
.setDefaults(Notification.DEFAULT_ALL)
设置默认值,由手机环境来决定在通知到来时播放什么铃声,如何振动,如何闪烁LED灯
最后说明一点,手机播放铃声、手机振动、LED灯的闪烁都需要真机调试,模拟器上是看不出效果的。


猜你喜欢
- 概述java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如"abc" )都可以被看作是实现
- 排列组合的概念排列:从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangem
- 1、public String(char[] c,begin,length).从字符数组c的下标begin处开始,将长度为length的字符
- 常用:System:根空间,包含一些基本的类库 System.Collections:主要是和集合类相关的类库 System.Collect
- 一、需求描述拼图是一款益智类经典游戏了,本游戏学习了一些前辈们的经验,整体来说讲,将图片用切图工具进行切割,监听用户手指滑动事件,当用户对凌
- 用来记录自己所用到的知识前两天在做项目的时候发现有时候在访问网络数据的时候由于后台要做的工作较多,给我们返回数据的时间较长,所以老大叫我加了
- Android 网络请求框架Volley实例详解首先上效果图Logcat日志信息on ReponseVolley特别适合数据量不大但是通信频
- Unsafe类介绍第一次看到这个类时被它的名字吓到了,居然还有一个类自名Unsafe?读完本文,大家也能发现Unsafe类确实有点不那么安全
- Java与C++实现相同的MD5加密算法1、Java版package com.lyz.utils.common;import java.io
- 目录带装饰效果的 ContainerRow 行布局和 Column列布局ListView列表组件GridView网格组件代码实现结语:左侧是
- 这一篇博客我们来使用UGUI实现图片的拖拽功能。说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一
- 一、前言Redis是一个NoSQL(非关系型数据库)数据库之一,key-value存储系统或者说是一个缓存键值对数据库,具有如下特性:基于内
- 概念在Java中,对象的生命周期包括以下几个阶段:创建阶段(Created)应用阶段(In Use)不可见阶段(Invisible)不可达阶
- 发现问题在C#连接SQL Server时,明明添加了引用using System.Data.SqlClient;却出现了下面这种情况:原因:
- 一.组合widget实现1.android和flutter自定义控件对比Android中,一般会继承View或已经存在的某个控件,然后覆盖d
- 我们都知道java是一种面向对象的编程语言,但是在实际意义上java并不是纯面向对象,因为面向对象的意义就是万物皆对象,那么如果说int类型
- try &
- 本文实例为大家分享了Flutter Drawer抽屉菜单示例代码,供大家参考,具体内容如下一.Flutter Drawer组件简介1.源码查
- 最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑)、
- 问题描述通过FeignClient调用微服务提供的分页对象IPage报错{"message": "Type d