有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用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. 应用Oracle(Linux中的安装)

    Linux中安装Oracle,不同于windows. Linux在安装时,要作些必要的分区配置,以便进行Oracle的安装: 同时需要创建专门的数据库用户和组,并配置环境变量. root登录 使用 r ...

  2. matlab取整

    matlab取整 Matlab取整函数有: fix, floor, ceil, round.取整函数在编程时有很大用处.一.取整函数1.向零取整(截尾取整)fix-向零取整(Round towards ...

  3. AlgorithmsI Exercises: UnionFind

    Question1 Give the id[] array that results from the following sequence of 6 unionoperations on a set ...

  4. BZOJ 1083 [SCOI2005]繁忙的都市

    1083: [SCOI2005]繁忙的都市 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1664  Solved: 1080[Submit][Sta ...

  5. 【模拟】Codeforces 704A & 705C Thor

    题目链接: http://codeforces.com/problemset/problem/704/A http://codeforces.com/problemset/problem/705/C ...

  6. w​i​n​d​o​w​s​7​旗​舰​版​I​I​S​6​配​置​-​保​证​能​发​布

    http://wenku.baidu.com/view/20b4d26248d7c1c708a145d1.html

  7. 配置openStack使用spice

    注:因为在测试配置过程中反复配置过多次,以下内容可能并不完整,有待验证. 按官方文档(openstack-install-guide-yum-juno)搭建和配置的OpenStack默认使用novnc ...

  8. java 编辑报错 非法字符: \ufeff 解决方案

    用Notepad ++ 调成utf-8 格式 bom 或无bom根据情况 新建类 把代码一句句粘进去 ok

  9. Python中 os._exit() sys.exit() exit()区别

    Python退出程序的方式有两种:os._exit(), sys.exit() 1)os._exit() 直接退出 Python程序,其后的代码也不会继续执行. 2)sys.exit() 引发一个 S ...

  10. python2.+进化至python3.+ 语法变动差异(不定期更新)

    1.输出 python2.+ 输出: print "" python3.+ 输出: print ("") 2.打开文件 python2.+ 打开文件: file ...