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. Easyui获取数据库date数据的显示

    众所周知Oracle数据库中的date与众不同,在Easyui中显示数据库的date类型如果不经过转化为显示为Object.因此需要经过处理. 1.首先你要写转化date的JavaScript < ...

  2. 【转】Mac访问Windows共享文件夹

    相信大多数的用户用Windows访问Windows的共享文件夹是一件很容易的事,但是如果用Mac来访问Windows共享文件夹就会遇到很多的麻烦了,尤其是设置是比较有区别的吗,接下来的将用图文交大家怎 ...

  3. 【转】在ASP.NET MVC中,使用Bundle来打包压缩js和css

    在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原 ...

  4. SEO_Alexa排名

    1.Alexa排名是评价某一网站访问量的一个指标,对SEO优化没有任何作用,这个数据是可以做假的,考虑Alexa排名纯粹是在浪费时间. 2.Alexa排名是针对已经在浏览器中安装了Alexa Tool ...

  5. protobuf2.5 iphone5s中崩溃的问题

    我们的游戏用到了protobuf2.5,在其他版本中都是好的,但iphone5s中崩溃,表现为针对DescriptorPool为空了.网上也找不到什么信息,xiaozhong同学各种尝试,都没有搞定, ...

  6. JavaScript学习笔记(高级部分—01)

    JavaScript的核心ECMAScript描述了该语言的语法和基本对象:DOM描述了处理网页内容的方法和接口:BOM描述了与浏览器进行交互的方法和接口. 简单说,ECMAScript描述了以下内容 ...

  7. 获取WebView加载HTML时网页中的内容

    main.xml如下: [html] view plaincopy <RelativeLayout xmlns:android="http://schemas.android.com/ ...

  8. Sqlserver更新数据表xml类型字段内容某个节点值的脚本

    GO USE [JC2010_MAIN_DB] 1.新建备份表JobObjectVersion_JCSchemVersion_BCK) GO IF EXISTS (SELECT * FROM sys. ...

  9. 再探java基础——对面向对象的理解(1)

    对象 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则.计划或事件.对象具有属性和行为,在程序设计中对象实现了数据和操作的结合,使数 ...

  10. SURF特征

    了解了SIFT特征后,来学习SURF特征. 虽说是SIFT的一个变种,可是跟SIFT还是有差别的 差别有例如以下: 1.尺度空间的构建(近似)不同. 2.同意尺度空间多层图像同一时候被处理 3.特征点 ...