Android控件之Notification
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,
0
// 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的更多相关文章
- Android控件介绍
1. 介绍 Android控件大多位于android.widget, android.view.View为他们的父类对于Dialog系列, android.app.Dialog为父类 Android的 ...
- [Android Pro] android控件ListView顶部或者底部也显示分割线
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...
- Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像
此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...
- Android 控件架构及View、ViewGroup的测量
附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...
- Android - 控件android:ems属性
Android - 控件android:ems属性http://blog.csdn.net/caroline_wendy/article/details/41684255?utm_source=tui ...
- Android 控件知识点,
一.Android控件具有visibility属性,可以取三个值:visible(默认值)可见,invisible(不可见,但仍然占据原有的位置和大小,可以看做是变得透明了),gone(空间不仅不可见 ...
- UIAutomator定位Android控件的方法
UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...
- 从Android系统出发,分析Android控件构架
从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...
- Android控件系列之RadioButton&RadioGroup(转)
学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用属性 3.理解RadioButton和CheckBox的区别 4.掌握Ra ...
随机推荐
- php 批量删除
<body><form action="shanchu.php" method="post"><table width=" ...
- mysql 事件
经常要周期性的执行某一个命令或者SQL语句.mysql事件,mysql的版本是5.1以上. 首先要查看事件是否开启了, SHOW VARIABLES LIKE 'event_scheduler'; S ...
- windows
1.拷贝远程文件 net use \\10.130.80.62\ipc$ 密码 /user:用户名 xcopy "\\10.130.80.62\G$\yt\apache-tomcat-7.0 ...
- python之路:Day03 --- Python基础3 >>函数
本节内容 1.函数基本语法及特性 2.参数 3.局部变量与全局变量 4.返回值 嵌套函数 5.递归 6.匿名函数 7.高阶函数 8.内置函数 一.函数基本语法及特性 区别 面向过程编程:根据业务逻辑从 ...
- 转:大神提出来的java服务器方面面试问题(当作自己的学习目标平时得多注意)
因为一些个人原因,陆陆续续参加了一些校招补招.社招的笔试和面试(BAT),也包括一些国外公司(Spotify, Google, Ericsson),最后有幸被网易收入麾下,拿到了S.下面罗列一些我复习 ...
- Unity Cookie
1 在Unity里面,选择脚本单击左键打开 Sync Mono Development 这样就可以打开整个工程的脚本文件 进而才能在脚本中继续进行切换 Mesh MeshFilt ...
- SecureCRT在远程主机和本地之间传输文件
概述 Linux系统不像Window系统有清晰的操作页面,数据能Copy下来,远程Linux的数据,就牵扯到本地数据与远程服务器数据交换的问题.Linux远程攻击SecureCrt提供了2种方式,可以 ...
- dotnet Core Asp.net 项目搭建
Asp.Net Core 介绍 Asp.Net Core 目前最新版本 1.0.0-preview2-003131 Asp.Net Core官网:https://dotnet.github.io/ A ...
- ROS学习(三)—— ROS文件系统
一.预备工作 使用ros0tutorials程序包,先下载: sudo apt-get install ros-<distro>-ros-tutorials 其中<distro> ...
- vue学习之旅
大纲: 属性 事件 循环 指令 交互 过滤器 模板 计算属性 自定义过滤器和指令 组件(父子组件之间的通讯) 路由和多层路由以及占位槽slot等其他 vue-loader和模块加载(webpack)等 ...