Android开发手记(23) Notification
有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用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的更多相关文章
- Android 开发手记一NDK编程实例
在Android上,应用程序的开发,大部分基于Java语言来实现.要使用c或是c++的程序或库,就需要使用NDK来实现.NDK是Native Development Kit的简称.它是一个工具集,集成 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- Android开发UI之Notification
Notification,顾名思义,通知,就是我们常说的系统推送. 官网链接:http://developer.android.com/reference/android/app/Notificati ...
- Android开发手记(28) Handler和Looper
Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道.平 ...
- Android开发手记(24) Log的使用及颜色的更改
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.本文 ...
- Android开发手记(22) 传感器的使用
Android的传感器主要包括八大传感器,他们分别是:加速度传感器(accelerometer).陀螺仪(gyroscope).方向传感器(orientation).磁力传感器(magnetic fi ...
- Android开发手记(18) 数据存储三 SQLite存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...
- Android开发手记(17) 数据存储二 文件存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...
- Android开发手记(32) 使用摄像头拍照
在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面. 我们要添加如下权限: <uses-permission android:na ...
随机推荐
- Node.js事件循环
Node JS是单线程应用程序,但它通过事件和回调概念,支持并发. 由于Node JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性.Node JS使用观察者模式.Node ...
- cf B Inna and Candy Boxes
题意:输入n,然后输入n个数ai,再输入n个数bi,如果在1-ai中能找到两个数x,y,x和y可以相等,如果x+y=bi,答案加上x*y,否则减去1,让结果尽可能大,输出结果. #include &l ...
- TWinControl的刷新过程(5个非虚函数,4个覆盖函数,1个消息函数,默认没有双缓冲,注意区分是TCustomControl还是Windows原生封装控件,执行流程不一样)
前提条件:要明白在TWinControl有以下四个函数的存在,注意都是虚函数: procedure Invalidate; override;procedure Update; override;pr ...
- Java实现二叉树的构建与遍历
转载:http://ocaicai.iteye.com/blog/1047397 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 package tree; ...
- 【HDOJ】2371 Decode the Strings
快速矩阵乘法.注意,原始字符串即为decode后的字符串.题目是要找到原始串. #include <cstdio> #include <cstring> #define MAX ...
- 从VC到g++遇到的事
最近做的项目,需要把代码从VC移植到g++下编译,在这个过程中,遇到了几个平台相关的问题--在VC下顺利编译的代码,但在g++中编译报错. 这里贴出来给大家分享一下: 1. 枚举类型 问题代码 enu ...
- vijosP1603迷宫
vijosP1603迷宫 链接:https://vijos.org/p/1603 [思路] 参考Matrix67的文章: [代码] #include<cstdio> #include< ...
- [Locked] Count Univalue Subtrees
Count Univalue Subtrees Given a binary tree, count the number of uni-value subtrees. A Uni-value sub ...
- THOMAS MASON--英国顶级衬衫面料品牌
欧尚时光 THOMAS MASON--英国顶级衬衫面料品牌 2014-01-26 欧尚时光 今天为大家介绍英国顶级衬衫面料厂商:THOMAS MASON(托马斯·梅森).THOMAS MAS ...
- Java 中 StringBuilder 在高性能用法总结
关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗? 还有些同学,还听过三句 ...