有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用Notification来完成这一工作。也许我们会想到以前经常使用的Toast来通知用户。虽然Notification与Toast都可以起到通知、提醒的作用,其实这两者还是有很大不同的。在android中,Notification是通过NotificationManager进行统一管理的,而Toast使用Toast.makeToast即可显示。另外,Notification可以长久的显示在系统的状态栏内,但是Toast只能暂时显示一段时间。

现在我们开始讨论创建Notification的一般步骤。

首先,我们需要通过getSystemService方法获得一个NotificationManager对象。

NotificationManager nfManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

然后,要想显示一个Notification,我们还需一个PendingIntent,由于PendingIntent由android系统负责维护,可以防止在应用程序关闭的时候系统自动销毁Notification对象。

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

然后,通过Notification.Builder创建一个Notification对象。

Notification notification = new Notification.Builder(MainActivity.this)
.setSmallIcon(android.R.drawable.ic_dialog_email) // 设置Icon
.setTicker("你有一封新邮件") // 设置接收时滚动通知
.setContentTitle("邮件主题:这是第" + notiID + "封邮件")// 设置Title
.setContentText("邮件内容:")// 设置Message
.setContentIntent(intent) // 设置用于显示的Intent
.setNumber(notiID) // 设置右下角Number
.getNotification(); //API 11可以使用getNotificatin()
// API 16及之后使用 build()
notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击自动消失

最后,通过NotificationManager来显示Notification即可。

nfManager.notify(notiID++, notification);  // notiID定义了通知的编号,notification为通知的内容

如果想销毁显示的Notification可以使用NotificationManager提供的方法。

nfManager.cancel(notiID);  // 销毁编号为notiID的通知
nfManager.cancelAll(); // 销毁所有通知

完整代码如下:

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class MainActivity extends Activity { private NotificationManager nfManager;
private Button btnNoti;
private Button btnClear;
private int notiID; @Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); notiID = 1;
nfManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
btnNoti = (Button)findViewById(R.id.brnNoti);
btnNoti.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PendingIntent intent = PendingIntent.getActivity(MainActivity.this, 0, getIntent(), 0);
Notification notification = new Notification.Builder(MainActivity.this)
.setSmallIcon(android.R.drawable.ic_dialog_email) // 设置Icon
.setTicker("你有一封新邮件") // 设置接收时滚动通知
.setContentTitle("邮件主题:这是第" + notiID + "封邮件")// 设置Title
.setContentText("邮件内容:")// 设置Message
.setContentIntent(intent) // 设置用于显示的Intent
.setNumber(notiID) // 设置右下角Number
.getNotification(); //API 11可以使用getNotificatin()
// API 16及之后使用 build()
notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击自动消失
nfManager.notify(notiID++, notification);
}
}); btnClear = (Button)findViewById(R.id.btnClear);
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
nfManager.cancel(notiID --);
// nfManager.cancelAll();
}
});
}
}

Android开发手记(23) Notification的更多相关文章

  1. Android 开发手记一NDK编程实例

    在Android上,应用程序的开发,大部分基于Java语言来实现.要使用c或是c++的程序或库,就需要使用NDK来实现.NDK是Native Development Kit的简称.它是一个工具集,集成 ...

  2. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式

    前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...

  3. Android开发UI之Notification

    Notification,顾名思义,通知,就是我们常说的系统推送. 官网链接:http://developer.android.com/reference/android/app/Notificati ...

  4. Android开发手记(28) Handler和Looper

    Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道.平 ...

  5. Android开发手记(24) Log的使用及颜色的更改

    在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.本文 ...

  6. Android开发手记(22) 传感器的使用

    Android的传感器主要包括八大传感器,他们分别是:加速度传感器(accelerometer).陀螺仪(gyroscope).方向传感器(orientation).磁力传感器(magnetic fi ...

  7. Android开发手记(18) 数据存储三 SQLite存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...

  8. Android开发手记(17) 数据存储二 文件存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...

  9. Android开发手记(32) 使用摄像头拍照

    在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面. 我们要添加如下权限: <uses-permission android:na ...

随机推荐

  1. 【MySQL】囧,mysql忘记用户密码

    Ubuntu(12.04)中安装的mysql,忘记记录用户名密码了,不想重装,有木有重设密码的方法? 有位园友给出了解决方法,在mysql 5.6.23上验证没有问题. 详情用力戳这里! 1.结束当前 ...

  2. Communication System

    poj1018:http://poj.org/problem?id=1018 题意:某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产, ...

  3. JSP出现中文乱码问题

    今天纠结了好半天,本地运行程序后没有中文乱码,唯独发到服务器后运行出现了乱码. 究其原因,皆因eclipse环境默认的JSP编码是Iso-8859-1,需要将其改为utf-8,与JSP文件中的编码声明 ...

  4. Caption,Text,WindowText的区别——TControl也有FText,是为了模拟一个窗口

    TControl = class(TComponent) // 控件的Windows功能从TControl开始 property Caption: TCaption read GetText writ ...

  5. COJ 2105 submatrix

    submatrix 难度级别: A: 编程语言:不限:运行时间限制:2000ms: 运行空间限制:131072KB: 代码长度限制:102400B 试题描述   小A有一个N×M的矩阵,矩阵中1~N* ...

  6. 动态规划(状态压缩):BZOJ 2621 [Usaco2012 Mar]Cows in a Skyscraper

      2621: [Usaco2012 Mar]Cows in a Skyscraper Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 303  Sol ...

  7. 【动态规划】HDU 5791 Two

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5791 题目大意: A,B两个数列,问A的子集和B的子集相等的子集对数.子集内顺序按照数列顺序,相同的 ...

  8. Vagrant 集群的部署

    使用Vagrant部署集群 一.运行多个虚拟机 我们通过配置Vagrantfile配置两个虚拟机--web服务器和数据库服务器. Vagrant::configure("2") d ...

  9. [Hibernate] 基本增删查改

    本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作,即CRUD. 本例子的目录结构如下 hibernate.cfg.xml 存储数据库信息,如数据库类型,账 ...

  10. Java 中 StringBuilder 在高性能用法总结

    关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗? 还有些同学,还听过三句 ...