Android通知就是让设备在屏幕最顶上那栏里面显示图标,当滑下通知栏之后可以看到列表状的通知选项,有些是“通知”类型的,有些是“正在运行”类型的,“通知”类型的通知是可以清除的,“正在运行”类型的通知是无法清除的,比如短信来了,顶上的状态栏就会出现通知,这么通知通常是可以被清除掉的,还比如听音乐的时候出现的通知,这么通知通常就不能清除的、正在运行的类型,具体如何定义这两种类型将会在后面的代码中给出。

参考这位朋友实例 感觉写着很轻便也很清晰。

转载自:https://www.juwends.com/tech/android/android-notification.html

/*
 * Copyright (C) 2013 Juwend's Demo
 *
 * 本代码可以任意复制与改动,欢迎转载,转载请注明出处
 *
 *
 */
 
package com.juwends.helper;
 
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
 
/**
 * 通知制造
 *
 * @author Juwend
 *
 */
public class NotificationHelper {
    // 1.实例化Notification类
    // 2.设置Notification对象的icon,通知文字,声音
    // 3.实例化PendingIntent类,作为控制点击通知后显示内容的对象
    // 4.加载PendingIntent对象到Notification对象(设置 打开通知抽屉后的 标题/内容)
    // 5.获得 NotificationManager对象
    // 6.使用NotificationManager对象显示通知
 
    /**
     * 发布通知
     *
     * @param c             上下文
     * @param notifyId      通知标识id
     * @param iconResId     显示的icon的id
     * @param textResId     显示的文字的id
     * @param soundResId    声音 - 没有使用(可以自己加)
     * @param titleResId    打开通知抽屉后的标题的id
     * @param contentResId  打开通知抽屉后的内容的id
     * @param cls           点击后打开的类
     * @param flag          通知标签
     * @return              返回Notification对象
     */
    static public Notification notify(Context c, int notifyId, int iconResId,
            int textResId, int soundResId, int titleResId, int contentResId,
            Class<?> cls, int flag) {
        final Resources res = ((Activity) c).getResources();
 
        return notify(c, notifyId, iconResId, res.getString(textResId), soundResId,
                res.getString(titleResId), res.getString(contentResId), cls,
                flag);
    }
 
    /**
     * 发布通知
     *
     * @param c                 上下文
     * @param notifyId          通知标识id
     * @param iconResId         显示的icon的id
     * @param notifyShowText    显示的文字
     * @param soundResId        声音 - 没有使用(可以自己加)
     * @param titleText         打开通知抽屉后的标题
     * @param contentText       打开通知抽屉后的内容
     * @param cls               点击后打开的类
     * @param flag              通知标签
     * @return                  返回Notification对象
     */
    static public Notification notify(Context c, int notifyId, int iconResId,
            String notifyShowText, int soundResId, String titleText,
            String contentText, Class<?> cls, int flag) {
 
        Notification n = genNotification(c, notifyId, iconResId, notifyShowText,
                soundResId, titleText, contentText, cls, flag);
 
        // 显示通知
        notify(c, notifyId, n);
 
        return n;
    }
 
    /**
     * 发布通知
     *
     * @param c         上下文
     * @param notifyId  通知标识id
     * @param n         通知对象
     */
    static public void notify(Context c, int notifyId, Notification n) {
        final NotificationManager nm = (NotificationManager) c
                .getSystemService(Context.NOTIFICATION_SERVICE);
 
        // 显示通知
        nm.notify(notifyId, n);
    }
 
    /**
     * 生成Notification对象
     *
     * @param c             上下文
     * @param notifyId      通知标识id
     * @param iconResId     显示的icon的id
     * @param textResId     显示的文字的id
     * @param soundResId    声音 - 没有使用(可以自己加)
     * @param titleResId    打开通知抽屉后的标题的id
     * @param contentResId  打开通知抽屉后的内容的id
     * @param cls           点击后打开的类
     * @param flag          通知标签
     * @return              返回Notification对象
     */
    static public Notification genNotification(Context c, int notifyId, int iconResId,
            int textResId, int soundResId, int titleResId, int contentResId,
            Class<?> cls, int flag) {
        final Resources res = ((Activity) c).getResources();
 
        return genNotification(c, notifyId, iconResId, res.getString(textResId), soundResId,
                res.getString(titleResId), res.getString(contentResId), cls,
                flag);
    }
 
    /**
     * 生成Notification对象
     *
     * @param c                 上下文
     * @param notifyId          通知标识id
     * @param iconResId         显示的icon的id
     * @param notifyShowText    显示的文字
     * @param soundResId        声音 - 没有使用(可以自己加)
     * @param titleText         打开通知抽屉后的标题
     * @param contentText       打开通知抽屉后的内容
     * @param cls               点击后打开的类
     * @param flag              通知标签
     * @return                  返回Notification对象
     */
    static public Notification genNotification(Context c, int notifyId, int iconResId,
            String notifyShowText, int soundResId, String titleText,
            String contentText, Class<?> cls, int flag) {
 
        Intent intent = null;
        if (cls != null)
            intent = new Intent(c, cls);
 
        final Notification n = new Notification();
 
        // 控制点击通知后显示内容的类
        final PendingIntent ip = PendingIntent.getActivity(c,0,  // requestCode  现在是没有使用的,所以任意值都可以
                intent,
                // PendingIntent的flag,在update这个通知的时候可以加特别的flag
                );
        // 设置通知图标
        n.icon = iconResId;
        // 通知文字
        n.tickerText = notifyShowText;
        // 通知发出的标志设置
        n.flags = flag;
        // 设置通知参数
        n.setLatestEventInfo(c, titleText, contentText, ip);
 
        return n;
    }
 
    /**
     * 取消消息
     *
     * @param c
     * @param notifyId
     * @return void
     */
    public static void cancel(Context c, int notifyId) {
        ((NotificationManager) ((Activity) c)
                .getSystemService(Context.NOTIFICATION_SERVICE))
                .cancel(notifyId);
    }
 
    // flags
    final static public int FLAG_ONGOING_EVENT_AUTO_CANCEL = Notification.FLAG_AUTO_CANCEL|Notification.FLAG_ONGOING_EVENT;
    final static public int FLAG_ONGOING_EVENT = Notification.FLAG_ONGOING_EVENT;
    final static public int FLAG_NO_CLEAR = Notification.FLAG_NO_CLEAR;
    final static public int FLAG_AUTO_CANCEL = Notification.FLAG_AUTO_CANCEL;
}

  有了这段代码,仅仅只需要简单的方法调用,就可以很方便的生成通知了。如果想在点击通知开启某个Context(Activity或者其它)时传入数据,则只需要自行处理开启用的intent即可(最好是单独使用一个方法来做,这样便不会改变上面代码对外的接口定义)。如上可见,设置了FLAG_ONGOING_EVENT这个标志之后,这个通知是“正在运行”的;FLAG_AUTO_CANCEL这个标志则是表明点击了这个通知之后,就自行的从通知栏上清除掉。

  最后一个参数表明对PendingIntent的标志位,这个标志位有时候也是很有用的,比如PendingIntent.FLAG_UPDATE_CURRENT就是声明对当前的PendingIntent(如果存在)的数据进行更新,如把intent更换了之类的,而不需要再去实例化新的对象。

Android控件之Notification的更多相关文章

  1. Android控件介绍

    1. 介绍 Android控件大多位于android.widget, android.view.View为他们的父类对于Dialog系列, android.app.Dialog为父类 Android的 ...

  2. [Android Pro] android控件ListView顶部或者底部也显示分割线

    reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...

  3. Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像

    此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...

  4. Android 控件架构及View、ViewGroup的测量

    附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...

  5. Android - 控件android:ems属性

    Android - 控件android:ems属性http://blog.csdn.net/caroline_wendy/article/details/41684255?utm_source=tui ...

  6. Android 控件知识点,

    一.Android控件具有visibility属性,可以取三个值:visible(默认值)可见,invisible(不可见,但仍然占据原有的位置和大小,可以看做是变得透明了),gone(空间不仅不可见 ...

  7. UIAutomator定位Android控件的方法

    UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...

  8. 从Android系统出发,分析Android控件构架

    从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...

  9. Android控件系列之RadioButton&RadioGroup(转)

    学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用属性 3.理解RadioButton和CheckBox的区别 4.掌握Ra ...

随机推荐

  1. sh6.脚本磁盘分区格式化

    练习1. 写一个脚本,通过ping 命令测试192.168.0.100到192.168.0.254之间的所有主机是否在线, 如果在线,就显示"ip is up."IP为真实IP地址 ...

  2. Yii 1开发日记 -- 搜索功能及Checkbox的实现

    用yii 1实现后台的搜索功能,效果如下图: 1.模型中: public function search() { $criteria = new CDbCriteria; //独立高级搜索 if(is ...

  3. Android 敏感 API 的说明

    从中国的国情来看,Google 的诸多产品,包括 gmail,Android 官方市场 Google Play 正处于并将长期处于访问不了的状态.国内几亿网民也要生活,于是墙内出现了“百家争鸣”的场面 ...

  4. UWP学习记录1-开端

    UWP学习记录1-开端 1.背景 针对不同基础的人,学习的路线自然是不同的.这篇文章记录的是我个人的学习路线,或者说笔记.我对自己的技术状态的定义是: A.有很好的windows平台编程基础: B.有 ...

  5. linux高级编程补充知识

    F: 计算机系统结构: ------------------------------- 应用程序 ----------------- |  库函数 -------------------------- ...

  6. 【Apache RocketMQ】RocketMQ捐赠给Apache那些鲜为人知的故事-转自阿里中间件

    序言 今年的双十一对阿里巴巴中间件消息团队来说,注定是个不平凡的日子.在这一天,稳定性小组重点攻克的低延迟存储解决方案成功地经受住了大考.整个大促期间,99.996%的延迟落在了10ms以内,极个别由 ...

  7. Python OS模块常用函数说明

    Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Wi ...

  8. VS低版本打开高版本解决方案(如08打开10、12、13版本vs编译的项目)

    一.vs2005打开vs2008编译的项目:1.用记事本打开sln文件,将: Microsoft Visual Studio Solution File, Format Version 10.00 # ...

  9. DFS序+线段树+bitset CF 620E New Year Tree(圣诞树)

    题目链接 题意: 一棵以1为根的树,树上每个节点有颜色标记(<=60),有两种操作: 1. 可以把某个节点的子树的节点(包括本身)都改成某种颜色 2. 查询某个节点的子树上(包括本身)有多少个不 ...

  10. 2016-1-29 图解HTTP(04)

    第7章 确保Web安全的HTTPS 在HTTP协议中有可能存在信息窃听或身份伪装等安全问题.使用HTTPS通信机制可以有效的防止这些问题. 7.1 HTTP的缺点 ● 通信使用明文(不加密),内容可能 ...