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简介的更多相关文章

  1. Android 状态栏通知Notification、NotificationManager详解

    http://www.cnblogs.com/onlyinweb/archive/2012/09/03/2668381.html

  2. Android 状态栏通知 Notification

    private NotificationManager manager; private Notification.Builder builder; @Override protected void ...

  3. 【Android】状态栏通知Notification、NotificationManager详解(转)

    在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类:  NotificationMa ...

  4. 状态栏通知Notification的简单使用

    今天在学习Notification时同时参考了一些相关的博客,现在结合自身学习实际来总结一下. 在使用手机时,当有未接来电或者短消息时,通常会在手机屏幕上的状态栏上显示.而在Android中有提醒功能 ...

  5. Android的状态栏通知(Notification)

    通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息. 1.Layout布局文件: <RelativeLayout xmlns:an ...

  6. Android——状态栏通知栏Notification

    1.AndroidManifest.xml注意要同时注册Notification02Activity <!-- 状态通知栏 Notification -->        <acti ...

  7. Android消息通知-Notification

    Android中常用的消息提醒,一种是Toast弹出提醒内容,一种是AlterDialog弹出框来提醒用户,还有一种就是消息通知的,用Android经常收到各种通知就是Notifation.Notif ...

  8. 安卓状态栏通知Status Bar Notification

    安卓系统通知用户三种方式: 1.Toast Notification 2.Dialog Notification 3.Status Bar Notification Status Bar Notifi ...

  9. Android学习总结(十五) ———— Notification(状态栏通知)基本用法

    一.Notification基本概念  Notification是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容.我们在用手机的时候 ...

随机推荐

  1. 如何通过ftell和fseek来获取文件大小

    #include <stdio.h> int main () { FILE * pFile=NULL; long size; pFile = fopen ("myfile.txt ...

  2. Java框架学习之Hibernate入门

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...

  3. hadoop-2.6.0为分布式安装

    hadoop-2.6.0为分布式安装 伪分布模式集群规划(单节点)------------------------------------------------------------------- ...

  4. iOS打电话、发邮件、发短信、打开浏览器

    //1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://163@16 ...

  5. 【自由谈】城域网IPv6过渡技术——4v6场景技术总结(1)

    为什么会存在4v6应用场景?主要是从“云-管-端”的IPv6状态决定的,“云”侧IPv4类业务丰富,IPv6驱动力小,所以“云”在较长一段时间内还是以IPv4类业务为主.“管”侧的IPv6化程度高,设 ...

  6. 解决Wamp 开启vhost localhost 提示 403 Forbbiden 的问题!

    非常奇怪的一个问题.我曾经从来都没有这样过!訪问 http://localhost/ 提示  403 Forbbiden. 我之前的设置一直都是这种: httpd.conf <Directory ...

  7. [React] React Router: Route Parameters

    A router library is no good if we have to hardcode every single route in our application. In this le ...

  8. 移动web开发框架研究

    纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架.jQuery Mobile出自于jQuery家族 ...

  9. CCArray(转)

    http://blog.csdn.net/passtome/article/details/7966451 CCArray也是cocos2d-x自己写的类.它相当于是objc的NSArray.在coc ...

  10. Java基本类型与包装类

    存储方式及位置的不同,基本类型是直接存储变量的值保存在堆栈中能高效的存取,封装类型需要通过引用指向实例,具体的实例保存在堆中   Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型) ...