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. vue 跨域请求,后端cookie session取不到

    虽然后端设置了可以跨域请求,但是后台设置到cookie中的session取不到!这时候mac电脑自己设置nginx代理! mac电脑系统重装了,记录一下安装nginx的过程: 1.打开终端(cmd) ...

  2. java中session和application的用法

    Session的用法 首先创建2个jsp文件t1.jsp  t2.jsp 在t1.jsp <% //设置session的键与值 session.setAttribute("abc&qu ...

  3. XAML与C#与WPF三者到底有什么关系?

    XAML是.NET体系开发程序或者网页时前台编程的一种布局方式或者说开发语言,可以比较自由的用标签的方式进行布局,借鉴了HTML和XML等语言的风格,并且加入了一些动画等的实现.C#则是后台逻辑开发用 ...

  4. 干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结

    目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方法引用) 四.Lambda表达式 五.泛型 六.自动释放 七.重写(override) ASP.NET CORE ...

  5. WPF 入门笔记之事件

    一.事件路由 1. 直接路由事件 起源于一个元素,并且不能传递给其他元素 MouserEnter 和MouserLeave 就是直接事件路由 2. 冒泡路由事件 在包含层次中向上传递,首先由引发的元素 ...

  6. linux_硬链接和软链接区别

    硬链接有点类似于复制的概念.    ln 源文件 目的文件    ln不加-s,则默认是硬链接.例如,ln script script-hard,ls命令显示,script*显示硬链接有两个.我任意删 ...

  7. 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字

    序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...

  8. C#4.0新增功能02 命名实参和可选实参

    连载目录    [已更新最新开发文章,点击查看详细] C# 4 介绍命名实参和可选实参. 通过命名实参,你可以为特定形参指定实参,方法是将实参与该形参的名称关联,而不是与形参在形参列表中的位置关联.  ...

  9. .NET Core CSharp初级篇 1-6 类的多态与继承

    .NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...

  10. linux初学者-文件权限

    linux初学者-文件权限 lunix系统都是以文件的形式存在,自然而然的就会要求不同的用户拥有不同的权限,这也是系统能够运行的根本保证,下文将对文件的权限管理进行简要的介绍. 1.文件属性的查看 - ...