public class MainActivity extends AppCompatActivity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button sendNotice = (Button) findViewById(R.id.button); sendNotice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Intent intent = new Intent(MainActivity.this,NoticeActivity.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是一个标题")
.setContentText("这是一个内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pi)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.build();
manager.notify(1,notification);
}
});
}
}

 

  这一个较为完整的通知,首先呢:

  NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

  获取了一个NotificationManager的实例,NotificationManager是一个管理通知的类,可以通过getSystemService()方法来获取到,参数是用于确定获取系统的那个服务的一个字符串。

  然后,使用了一个Buider构造器来创建一个notification对象,一般的使用方法如下:

Notification notification = new NotificationCompat.Builder(context).build();

  这个代码只是创建了一个空的notification对象,可以在build()之连缀使用多个设置方法设置icon、文字、提示声音、振动等等参数。比如:

  Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是一个标题")
.setContentText("这是一个内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pi)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.build();

  

  其中:

  setContentTitle()方法用于指定通知的标题内容;

  setContentText()方法用于指定通知的正文内容;

  setWhen()方法会在通知上显示通知被创建的时间(System.currentTimeMillis()这个方法将返回时间,以毫秒为单位);

  setSmallIcon()用于指定小图标,不过这里只能使用纯alpha图层的图片,这个图标将显示在状态栏没有下拉的状态栏上;

  setLargeIcon()用于指定大图标,下拉状态栏的时候就能看到大图标了

  setContentIntent()这里传入一个PendingIntent类的对象用于指定点击通知后的相应。

  setDefaults()这里指定了当通知显示的时候的效果,它会根据手机的环境来决定播放什么铃声,和如何振动。

  最后:

manager.notify(1,notification);

  使用NotificationManager的notify()方法让通知显示出来,第一个参数是一个id,要保证每个通知的id不同,第二个参数就是设置好的notification对象

  具体效果就是:

                   

  想要实现点击的效果就需要一个PendingIntent类,它主要提供几种静态方法实现获取PendingIntent的实例,根据需求分别是getActivity(),getBroadcast(),getService(),比如这里使用的是:

PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

  getActivity(),getBroadcast(),getService()这三个方法的参数都是一个的,第一个参数是context,第二个通常是0,第三个是一个Intent对象,通过这个Intent对象可以构建出PendingIntent的意图,第四个参数用于确定PendingIntent的行为,通常有四种值可以选:

  FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。
  FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。
  FLAG_ONE_SHOT:该PendingIntent只作用一次。在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException。
  FLAG_UPDATE_CURRENT:如果系统中有一个和你描述的PendingIntent对等的PendingInent,那么系统将使用该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。

  这里使用0即可。

  

Intent intent = new Intent(MainActivity.this,NoticeActivity.class);

  这里传入的intent对象是这样一个启动NoticeActivity活动的,所以点击通知时会启动NoticeActivity活动。

  对于通知的设置还可以在build()之使用这些方法:

  1、播放声音

  .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ohh")))    

.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ohh")))

  这个用于设置通知的声音;

  2、振动

.setVibrate(new long[] {0, 1000, 1000, 1000})

  这个用于设置通知的振动的参数是一个长整型的数组,下标0的值表示通知到来时手机静止的时长,下标1的值表示手机振动的时长,下标2的值又表示手机振动的时长,以此类推。通知这里表示通知到来时手机立即振动1秒,然后停止1秒,然后再振动1秒。

  想要振动还需要权限

<uses-permission android:name="android.permission.VIBRATE"/>

  

  3、LED

.setLights(Color.GREEN,1000,1000)

  这个是设置通知到来时手机的LED灯,第一个参数是指定颜色,第二个参数指定亮起的时长,第二个是暗去的时长。

  4、取消通知

.setAutoCancel(true)

  这个是点击这个通知后这个通知就消失。这里还能调用NotificationManager的cacel()方法显式的取消这个通知,比如在这里可以在这个通知启动的活动中设置一个按钮然后调用这个方法,具体就是:

public class NoticeActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notice);
final NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Button cacnel = (Button) findViewById(R.id.cancel); cacnel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
manager.cancel(1);
}
});
}
}

   manager.cancel(1)里面的参数就是通知的id。

   5、大文本和大图片   

.setContentText("这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容")

  .setContentText()使用这个方法显示一个长文本的时候会显示不全。

  这时候就需要使用setstyle()方法:

setStyle(new NotificationCompat.BigTextStyle().bigText("这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容"))

  这里创建了一个NotificationCompat.BigTextStyle()对象,这个对象适用于封装长文本信息的,然后调用他的bigText()方法将文字内容传入。

  与之类似,还可以显示一张大图片:

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.image_1)))

  NotificationCompat.BigPictureStyle()这个对象用于设置大图片,然后调用它的bigPicture()方法将图片传入,然后通过调用BitmapFactory的decodeResource方法将图片解析为Bitmap对象。

  6、通知的重要程度

  通知的重要程度使用setPriority()方法,通常有个整型的常量值可选:PRIORITY_DEFAULT这是一个默认的重要程度,和不设置一样;PRIORITY_MIN,这表示系统旨在特定的情况才显示,比如下拉的时候;PRIORITY_LOW,系统可能会缩小这个通知,改变它的顺序,将其排在重要的通知的后面;PRIORITY_HIGH,会被系统放大,改变其顺序,将其排在比较靠前的位置;PRIORITY_MAX是最高的重要程度,系统会立即显示。比如: 

.setPriority(NotificationCompat.PRIORITY_MAX)  

 当重要程度达到MAX时系统会弹出一个横幅立即显示这条通知,不过如果使用小米手机的话要自行开启悬浮通知的权限。。

android ——通知管理的更多相关文章

  1. android 的通知管理

    1在context里定义通知管理器(NotificationManager) NotificationManager notificationManager = (NotificationManage ...

  2. Xamarin.Android通知详解

    一.发送通知的机制 在日常的app应用中经常需要使用通知,因为服务.广播后台活动如果有事件需要通知用户,则需要通过通知栏显示,而在Xamarin.Android下的通知需要获取Notification ...

  3. Android线程管理之ThreadPoolExecutor自定义线程池

    前言: 上篇主要介绍了使用线程池的好处以及ExecutorService接口,然后学习了通过Executors工厂类生成满足不同需求的简单线程池,但是有时候我们需要相对复杂的线程池的时候就需要我们自己 ...

  4. android通知-Notification

    android中,当app需要向发送一些通知,让使用者注意到你想要告知的信息时,可以用Notification.下面,就来讨论一下,Notification的用法,我们从实际的小例子来进行学习. 1. ...

  5. Android线程管理(二)——ActivityThread

    线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...

  6. Android 核心分析之十三Android GWES之Android窗口管理

    Android GWES之Android窗口管理1基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Wi ...

  7. Android窗口管理服务WindowManagerService显示窗口动画的原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8611754 在前一文中,我们分析了Activi ...

  8. Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...

  9. Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activ ...

随机推荐

  1. 使用flink Table &Sql api来构建批量和流式应用(2)Table API概述

    从flink的官方文档,我们知道flink的编程模型分为四层,sql层是最高层的api,Table api是中间层,DataStream/DataSet Api 是核心,stateful Stream ...

  2. EnjoyingSoft之Mule ESB开发教程系列第五篇:控制消息的流向-数据路由

    目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流 ...

  3. TLS示例开发-golang版本

    目录 前言 制作自签名证书 CA 服务器证书相关 客户端证书相关 证书如何验证 在浏览器中导入证书 导入证书 修改域名 golang服务端 目录 main.go 测试 参考 前言 在进行项目总结的时候 ...

  4. yum只下载不安装软件包

    一.通过yum自带的工具yumdownloader [root@host---- interpreter]# rpm -ql yum-utils package yum-utils is not in ...

  5. SSAS Tabular 表格模型建模(关系)及部署

    一.表格建模(SSAS 表格)   表格模型是 Analysis Services 中的内存中数据库. 使用最先进的压缩算法和多线程查询处理器,xVelocity 内存中分析引擎 (VertiPaq) ...

  6. 个人永久性免费-Excel催化剂功能第79波-自动及手动备份功能,比Onedrive还好用

    在OFFICE365里,有个自动保存功能,可惜保存的地址是在Onedrive里,在中国国情下,备份十分卡顿,近乎难以忍受的慢.虽然现在收费性的网盘部分是可以有文件版本的备份功能,但也是繁琐且最要命的是 ...

  7. 个人永久性免费-Excel催化剂功能第44波-可见区域复制粘贴不覆盖隐藏内容

    Excel的复制粘贴操作,每天都在进行,若其中稍能提升一点效率,长久来说,实在是很可观的效率提升. Excel自带的复制粘贴功能,若复制的数据源或粘贴的目标位置中有隐藏的行列内容,简单一个复制粘贴充满 ...

  8. 自定义View之开关

    资源文件 首先我们需要有两个图片文件,分别是开关的背景和开关的滑块 自定义View 1.写一个类继承View 2.copy该类的全路径名在布局文件使用, 3.找到这个控件,设置初始信息 4.根据需求绘 ...

  9. Html5web全栈前端开发_angular框架

    昵称领取全套angular视频教程 一.Typescript typescript简称ts,是js语法的超集,很多js新的语法就借鉴了ts语法.ts是由微软团队维护的 1.1 TS简介 1.1.1 G ...

  10. 第二章 jQuery框架使用准备

    window常用属性: History:有关客户访问过的URL的信息 Location: 有关当前url的信息 常用方法: Confirm()将弹出一个确认对话框 open()在页面上弹出一个新的浏览 ...