Android 状态栏通知Notification、NotificationManager简介
Notification(通知)一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这个通知;
在Android系统中,发一个状态栏通知还是很方便的。发送一个状态栏通知必须用到两个类: NotificationManager 、 Notification;
NotificationManager : 是状态栏通知的管理类,负责发通知、清楚通知等;NotificationManager 是一个系统Service,必须通过 getSystemService()方法来获取;
Notification:是具体的状态栏通知对象,可以设置icon、文字、提示声音、振动等等参数;
我们先看下一个通知需要的基本参数:
(1)Icon:图标;
(2)PendingIntent:点击通知执行页面跳转;
(2)Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动;
(3)Content Title:Notification展开后的标题;
(4)Content Text:Notification展开后的内容;
而一个通知通常需要以下几步:
(1)获取NotificationManager:
nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
(2)实例化Notification对象,并设置Notification的属性;
notification.icon = R.drawable.icon; // 设置通知在状态栏显示的图标
notification.tickerText = "One Message is coming!!!"; // 通知在状态栏显示的内容
notification.when = when; // 设置来通知时的时间
notification.sound = Uri.parse("android.resource://com.sun.alex/raw/dida"); // 自定义声音
notification.flags |= Notification.FLAG_AUTO_CANCEL; // 点击清除按钮或点击通知后会自动消失
notification.flags |= Notification.FLAG_INSISTENT; // 一直进行,比如音乐一直播放,知道用户响应
notification.defaults = Notification.DEFAULT_SOUND; // 调用系统自带声音
notification.defaults = Notification.DEFAULT_VIBRATE; // 设置默认震动
notification.defaults = Notification.DEFAULT_ALL; // 设置铃声震动
notification.defaults = Notification.DEFAULT_ALL; // 把所有的属性设置成默认
(3)调用setLatestEventInfo()方法在视图中设置图标和时间;
// 实例化Intent Intent intent = new Intent(MainActivity.this, MainActivity.class); // 获得PendingIntent PendingIntent pIntent = PendingIntent.getActivity(MainActivity.this, 0,intent, 0); // 设置事件信息 notification.setLatestEventInfo(MainActivity.this, " Title", "Content",pIntent);
(4)发出通知:通过NotificationManager对象的notify()方法来执行一个Notification的消息;
private int Notification_ID = 110; nManager.notify(Notification_ID, notification);
(5)清除通知:通过NotificationManager的cancel(int)方法,来清除某个通知,其中参数是Notification的唯一标识ID,当然也可以通过cancelAll()来清除状态栏所有的通知;
nManager.cancel(Notification_ID);
下面用例子来说明一下:

三个按钮,分别是发送,然后更新,最后清除通知;
第一步,点击发送后;

然后查看通知:

第二步,点击更新通知,然后查看通知:

第三步:清除通知:


实现代码如下:
布局文件activity_main.xml 只有三个按钮,就不写了;
主要看MainActivity.java
package com.xiaozhang.notificationtest;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button1, button2, button3;
// 通知管理器
private NotificationManager nManager;
// 通知显示内容
private PendingIntent pendingIntent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button1.setOnClickListener(onclick);
button2.setOnClickListener(onclick);
button3.setOnClickListener(onclick);
nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent intent = new Intent(this, MainActivity.class);
pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent,
0);
}
OnClickListener onclick = new OnClickListener() {
private int Notification_ID = 110;
private Notification notification;
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
notification = new Notification();
notification.icon = R.drawable.icon; // 设置通知在状态栏显示的图标
notification.tickerText = "One Message is coming!!!"; // 通知在状态栏显示的内容
// 如果要全部采用默认值, 用 DEFAULT_ALL.
// 此处采用默认声音
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
// 让声音、振动无限循环,直到用户响应
notification.flags |= Notification.FLAG_INSISTENT;
// 通知被点击后,自动消失
notification.flags |= Notification.FLAG_AUTO_CANCEL;
// 第二个参数 :下拉状态栏时显示的消息标题
// 第三个参数:下拉状态栏时显示的消息内容
// 第四个参数:点击该通知时执行页面跳转
notification.setLatestEventInfo(MainActivity.this, "通知1",
"第一条信息:one message", pendingIntent);
// 发出状态栏通知
nManager.notify(Notification_ID, notification);
break;
case R.id.button2:
// 更新通知
// 比如状态栏提示有一条新短信,还没来得及查看,又来一条新短信的提示;此时可以采用更新原来通知的方式。
// (再重新发一个通知也可以,但是这样会造成通知的混乱,而且显示多个通知给用户,对用户也不友好)
notification.setLatestEventInfo(MainActivity.this, "通知2",
"第二条消息:second message", pendingIntent);
nManager.notify(Notification_ID, notification);
break;
case R.id.button3:
nManager.cancel(Notification_ID);
break;
}
}
};
}
Android 状态栏通知Notification、NotificationManager简介的更多相关文章
- Android 状态栏通知Notification、NotificationManager详解
http://www.cnblogs.com/onlyinweb/archive/2012/09/03/2668381.html
- Android 状态栏通知 Notification
private NotificationManager manager; private Notification.Builder builder; @Override protected void ...
- 【Android】状态栏通知Notification、NotificationManager详解(转)
在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类: NotificationMa ...
- 状态栏通知Notification的简单使用
今天在学习Notification时同时参考了一些相关的博客,现在结合自身学习实际来总结一下. 在使用手机时,当有未接来电或者短消息时,通常会在手机屏幕上的状态栏上显示.而在Android中有提醒功能 ...
- Android的状态栏通知(Notification)
通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息. 1.Layout布局文件: <RelativeLayout xmlns:an ...
- Android——状态栏通知栏Notification
1.AndroidManifest.xml注意要同时注册Notification02Activity <!-- 状态通知栏 Notification --> <acti ...
- Android消息通知-Notification
Android中常用的消息提醒,一种是Toast弹出提醒内容,一种是AlterDialog弹出框来提醒用户,还有一种就是消息通知的,用Android经常收到各种通知就是Notifation.Notif ...
- 安卓状态栏通知Status Bar Notification
安卓系统通知用户三种方式: 1.Toast Notification 2.Dialog Notification 3.Status Bar Notification Status Bar Notifi ...
- Android学习总结(十五) ———— Notification(状态栏通知)基本用法
一.Notification基本概念 Notification是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容.我们在用手机的时候 ...
随机推荐
- LIS 最长单调子序列模板
namespace LIS { template <class T> int lis(vector<T> v) { ; vector<T> d; ;i<v.s ...
- CSS常用操作-图片
index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- iOS蓝牙4.0协议简单介绍
iOS开发蓝牙4.0的框架是CoreBluetooth,本文主要介绍CoreBluetooth的使用,关于本文中的代码片段大多来自github上的一个demo,地址是myz1104/Bluetooth ...
- android学习——GestureDetector.OnGestureListener 详解
Android Touch Screen 与传统Click Touch Screen不同,会有一些手势(Gesture),例如Fling,Scroll等等.这些Gesture会使用户体验大大提升.An ...
- IE下判断IE版本语法使用
先摆一下判断IE版本语法 <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见 <!--[if lte IE 7]> <![ ...
- javaScript模块化一
1. Module模式的基本特性 A) 模块化 可重用 B) 封装了变量和function 和全局的namespace不接触 松耦合. C) 只暴露可用public的方法 其他私有方法全部隐藏 ...
- USB设备架构
USB设备,分为3层:1.底层为传送和接受数据的总线接口:2.中间层处理总线和不同端点的数据传输:3.最高层由串行总线设备提供.主要研究中间层. USB设备状态,主要研究外部可见状态. 1,连接态-- ...
- mybatis的详解
最新不知道脑子怎么想的,突然对mybatis特别感兴趣,之前在学校的时候学过两天,有了一个简单的认识,工作以后,项目中也有用到,趁着兴趣还在,抓紧整理一个文档,方便学习mybatis,同时,自己也在巩 ...
- uCgui和emWin的区别
在国内做嵌入式系统的,开始入门OS的时候,大家应该都会选择uC/OS,为什么?因为代码开源且资料众多嘛.由于uC/OS的原因大家也一定接触了uC/GUI的嵌入式图形软件库.其实uC ...
- jsonp跨域请求学习笔记
前言 ajax,用苍白的话赞扬:很好. 我们可以使用ajax实现异步获取数据,减少服务器运算时间,大大地改善用户体验:我们可以使用ajax实现小系统组合大系统:我们还可以使用ajax实现前端的优化.( ...