有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用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. 首页重定位到mian.action上

    <body onload="top.location.href='<%=request.getContextPath()%>/main.action';">

  2. GNU FORK PTHREAD SIGNALS

    Linux程序设计入门 - fork, pthread, and signals 在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫. fork()及signal经常运用在da ...

  3. [BZOJ 1026] [SCOI 2009] Windy数 【数位DP】

    题目链接:BZOJ - 1026 题目分析 这道题是一道数位DP的基础题,对于完全不会数位DP的我来说也是难题.. 对于询问 [a,b] 的区间的答案,我们对询问进行差分,求 [0,b] - [0,a ...

  4. codeforces C. Devu and Partitioning of the Array

    题意:给你n个数,然后分成k部分,每一个部分的和为偶数的有p个,奇数的有k-p个,如果可以划分,输出其中的一种,不可以输出NO; 思路:先输出k-p-1个奇数,再输出p-1个偶数,剩余的在进行构造.  ...

  5. Linux下常见权限操作相关命令

    ls -alls -ld chmod 700 sys_config chmod 700 sys_objschmod 4711 objget su test_setuid -c "./objp ...

  6. ♫【JS】offsetParent

    This property will return null on Webkit if the element is hidden (the style.display of this element ...

  7. Smartdraw世界上最流行的商业绘图软件

    Smartdraw 更多图片(5张) SmartDraw是世界上最流行的商业绘图软件.2006 年获美国政府司法部 (U.S. Department of Justice) 专用软件,2007获美国政 ...

  8. HDOJ 2056 Rectangles

    Problem Description Given two rectangles and the coordinates of two points on the diagonals of each ...

  9. WEB性能测试:你应该带上VisualStudio2010

    原文地址:http://www.16aspx.com/Article/62 在Web性能测试方面,增加了循环(Loops)和条件(Conditions),让开发人员可以为他们的应用程序写出更复杂,更智 ...

  10. openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案

    tuning for Data Transfer hosts connected at speeds of 1Gbps or higher <一.本次OpenStack系统调试简单过程简单记录& ...