自定义通知与系统通知的学习(详解)
因为有需求要做非系统通知,所以小马找个时间干脆一起学习了系统默认的通知与自定义通知的实现,吼吼,虽然简单,但开心呀,不多讲,老规矩,先看效果再来看代码:
一:应用刚启动时:
二:查看系统默认接收到通知时的效果图:
三:自定义通知小提示效果图:
四:自定义通知布局与系统默认布局对比
有了效果图后再后代码就简单多了,直接看看代码,小马就直接在源代码里面加了注释,有不妥之处还请朋友们提出来 :
- package com.xiaoma.www.demo;
- 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;
- /**
- * @Title: NotificationDemoActivity.java
- * @Package com.xiaoma.www.demo
- * @Description: 通知控制类
- * @author MZH
- */
- public class NotificationDemoActivity extends Activity {
- private Button clearBtn ;
- private NotificationManager manager ;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- /**
- * 初始化方法实现
- */
- private void init(){
- //步骤一:取得系统服务
- manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
- //步骤二:
- Notification notification = new Notification(R.drawable.notification,
- "收到小马通知测试", System.currentTimeMillis());
- /**
- * 小马在这个地方写下为什么要在用到通知的时候要创建PendingIntent对象,是因为
- * Notification可以与应用程序脱离,即便应用程序关闭,Notification仍然
- * 会显示在状态栏中,当应用程序再次启动后,又可以重新控制这些Nofication消息,
- * 如清除或替换它们,因为才创建的此对象,更神奇的是这个对象由安卓系统本身维护哦,所以
- * 在应用关闭后这个对象是不会被翻译掉的
- */
- //步骤三:
- Intent intent = new Intent();
- intent.putExtra("Msg", "这是从Notification传递过来的信息");
- intent.setClass(this, NotificationDemoTest.class);
- PendingIntent contentIntent = PendingIntent.getActivity(this, 0,intent, 0);
- //步骤四:setLatestEventInfo通过标准的方式将我们的通知设置到指定的View中
- notification.setLatestEventInfo(this, "通知测试哦", "这是通知的主内容", contentIntent);
- //写下面这句话的时候大家注意下不要忘了加震动权限,不然没法调用硬件
- //notification.defaults = Notification.DEFAULT_VIBRATE;
- //下面这句是把当前的通知设置永久保存的Notification,好暴力呀,吼吼
- //notification.flags = Notification.FLAG_NO_CLEAR
- //下面这句是指:如果要让其它的软件检测到永久保存的通知时可以这样写
- //Notification.flags = Nofication.FLAG_ONGOING_EVENT;
- /**
- * 在这一步需要指定标识Notification的唯一ID,这个ID必须相对于同一个
- * NoficationManager对象是唯一的,否则就会覆盖相同ID的Notification
- */
- //步骤五:
- manager.notify(R.drawable.notification, notification);
- clearBtn = (Button)findViewById(R.id.button1);
- clearBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- manager.cancel(R.drawable.notification);
- //清除所有通知:
- //manager.cancelAll();
- }
- });
- }
- }
再来看下接收上面这个通知通过Intent发给第二个Activity的代码,虽然很简单,但有这个后,大家就可以随便更改系统级的通知咯,不用老是用系统很死板很统一的布局,写出自己的个性啦,吼吼,加油加油,看代码了:
- package com.xiaoma.www.demo;
- 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;
- import android.widget.RemoteViews;
- import android.widget.Toast;
- /**
- * @Title: NotificationDemoTest.java
- * @Package com.xiaoma.www.demo
- * @Description: 接收并弹出通知传递过来的信息
- * @author MZH
- */
- public class NotificationDemoTest extends Activity {
- //声明变量
- private Button selfBtn;
- private NotificationManager manager ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.maintwo);
- init();
- }
- /**
- * 初始化方法实现
- */
- private void init(){
- Intent i = this.getIntent();
- String msg = i.getStringExtra("Msg");
- if(!"".equals(msg)){
- Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
- }else{
- Toast.makeText(this, "未接收到任何短信", Toast.LENGTH_SHORT).show();
- }
- selfBtn = (Button)findViewById(R.id.button2);
- selfBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- sendNotification();
- }
- });
- }
- private void sendNotification(){
- /**
- * 下面还是五个步骤,呵呵,跟前面那个Activity是一样的,只是通知布局不同咯,用RemoteViews加载
- */
- manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
- Notification notification = new Notification(R.drawable.ic_launcher,
- "这是自定义通知的信息哦", System.currentTimeMillis());
- PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, getIntent(), 1);
- /**
- * RemoteViews这个类的官方文档解释为:
- * 很直接很简单的讲就是:从我们自己的XML文件中加载一个VIEW到通知中
- */
- RemoteViews rViews = new RemoteViews(getPackageName(), R.layout.notification);
- rViews.setTextViewText(R.id.textView, "更新自定义内容");
- notification.contentView = rViews;
- notification.contentIntent = pendingIntent;
- //notification.setLatestEventInfo(this, "这是通知的标题", "这是通知的正文", pendingIntent);
- manager.notify(1, notification);
- }
- }
这个代码虽然很简单,但小马想通过自己的积累,哪怕每天积累一点点知识点,足矣,吼吼,记录下自己成长的过程,如果朋友们对我的小DEMO有什么好的建议请直接跟小马讲,一定向各位虚心学习,先谢谢啦,最后 ,老样子,这个小DEMO的源码小马还是会放到附件中去,希望朋友们发现问题请直接指出,谢谢
附件:http://down.51cto.com/data/2359705
本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/767219,如需转载请自行联系原作者
相关文章:

Quick Cocos2dx 初步战斗
呵呵,图片先来一发: 最近懒,很懒,连我自己都觉得有点可耻了。 但是实在没有什么东西啊,温水煮青蛙的什么的。 吐槽完成,以上。 目前完成了简单的战斗部分,AI还需要抽出来。 然后突然之间想到手游…

C#简介- 类和对象
类(class)是C#类型中最基础的类型。类是一个数据结构,将状态(字段)和行为(方法和其他函数成员)组合在一个单元中。类提供了用于动态创建类实例的定义,也就是对象(object&…

普诺飞思获创新工场新一轮投资,加速神经拟态视觉传感技术商业化
2021年7月6日,中国上海——世界领先的神经拟态视觉解决方案企业普诺飞思(Prophesee)今日宣布 C轮融资,由创新工场领投、小米及上海韦豪创芯跟投,数家老股东加码。其中,小米是全球三大移动设备供应商之一&am…

YYHS-魏传之长坂逆袭(梦回三国系列T1)
题目描述 众所周知,刘备在长坂坡上与他的一众将领各种开挂,硬生生从曹操手中逃了出去,随后与孙权一起火烧赤壁、占有荆益、成就霸业。而曹操则在赤壁一败后再起不能,终生无力南下。建安二十五年(220年),曹操已到风烛残…

Linux中/proc目录下文件详解
Linux中/proc目录下文件详解(一)声明:可以自由转载本文,但请务必保留本文的完整性。作者:张子坚email:zhangzijian163.com说明:本文所涉及示例均在fedora core3下得到。 ---------------------------------…

Swift常量和变量
常量和变量由一个特定名称来表示,如maxNumber 或者 message。常量所指向的是一个特定类型的值, 如数字10或者字符”hello”。变量的值可以根据需要不断修改,而常量的值是不能够被二次修改的。 常量和变量的声明 常量和变量在使用前都需要声明…

Openpose+Tensorflow 这样实现人体姿态估计 | 代码干货
作者 | 李秋键出品 | AI科技大本营(ID:rgznai100)人体姿态估计指从单个 RGB 图像中精确地估计出人体的位置以及检测骨骼关键点的位置。人体姿态估计是计算机视觉领域的研究热点,是诸多计算机视觉任务的基础,如动作分类、异常行为检…

主动防病毒内容篇
为何需要主动防病毒 近年来,对于防病毒软件效用的争论有愈演愈烈之势。我们知道,目前几乎所有的主流防病毒产品都是以分析病毒特征码为基础,通过升级安装在用户端的病毒特征码数据库实现对病毒的辨识。只有发现和确认了病毒之后,才…

icinga服务器系统监控软件的安装
系统环境rhel和Centos都可以安装这里我们所使用的安装包为中文版的icinga-cn-1.9.3.tar.bz2(1)安装icinga软件所支持的组件包(我们这里采用yum源的方式)组件:libdbi-dbd-mysql-0.8.3-5.1.el6.x86_64.rpmgd-devel-2.0.3…

size_t与ssize_t
size_t与ssize_t 为了增强程序的可移植性,便有了size_t,它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。 l 在32位系统上定义为unsigned int ,也就是说在32位系统上是32位无符号整形…

自动驾驶中实时车道检测和警报
作者 | 小白 来源 | 小白学视觉未来十年,自动驾驶将彻底改变人们的出行方式。目前,自动驾驶应用程序目前正在测试各种案例,包括客车、机器人出租车自、动商业运输卡车、智能叉车以及用于农业的自动拖拉机。自动驾驶需要计算机视觉感知模块来…

OSS.Core基于Dapper封装(表达式解析+Emit)仓储层的构思及实现
最近趁着不忙,在构思一个搭建一个开源的完整项目,至于原因以及整个项目框架后边文章我再说明。既然要起一个完整的项目,那么数据仓储访问就必不可少,这篇文章我主要介绍这个新项目(OSS.Core)中我对仓储层的…

GNU Make chapter 2 —— Makefile 介绍
Makefile是由一系列的rule规则组成,这些rule都遵循以下形式: target ... : prerequisites ...command...... target(目标) 一般来说是需要生成的程序(模块)的名字,也可以是要执行的动作的名字,这…

C#编写的生成缩略图程序
if(fileupload.PostedFile!null) { //addto为要添加的属性,aboutfile为文件说明 string nam fileupload.PostedFile.FileName ; //取得文件名(抱括路径)里最后一个"."的索引 int i nam.LastIndexOf("."); /…

深度盘点Python11个主流框架:Pandas、Django、Matplotlib、Numpy、PyTorch......
六月份TIOBE编程语言排行榜,位居第二名的Python与第一名C语言之间的差距正在逐渐缩小。Python如此受欢迎一方面得益于它崇尚简洁的编程哲学,另一方面是因为强大的第三方库生态。要说杀手级的库,很难排出个先后顺序,因为python的明…

多表查询 外连接
关于外连接查询:链接查询的时候经常直接使用连接语句,可是如果只有主键没有写其他属性的时候,直接用连接查询得到的记录数是不完整的。 所以应该使用外连接查询:left join on 或者right join on. 例如在工单管理部分绑定到gridvie…

C#生成Excel文件的方法
一个示例: class AppTest { private Excel.ApplicationClass _x; public static void Main0() { AppTest a new AppTest(); a._x new Excel.ApplicationClass(); a._x.UserControl false; for (int i 0 ;i < 4; i) { a.SaveToXls("D://test//" i…

太酷了,Python 制作足球可视化图表 | 代码干货
作者 | 小F来源 | 法纳斯特大家好,我是小F。最近不少小伙伴都会熬夜看欧洲杯。今年的欧洲杯相比起往年的欧洲杯来说,可谓是冷门频出,出乎意料。真的不知道,第一会花落谁家~本期小F就和大家分享一下,用Pytho…

便捷,轻巧的Groovy数据库操作
本文主要介绍Groovy对数据的CRUD操作,熟悉groovy.sql包,测试使用的数据库是H2。1.数据库连接配置//数据库连接配置 def db [url:jdbc:h2:mem:groovy,user:root,password:root,driver:org.h2.Driver ];2.创建数据库连接,这里使用到Groovy的Sq…

Linux查看CPU和内存使用情况详解
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中, 可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的 模…

Fatal Error: Out of memory php内存溢出处理三种方法
有时候我们在运行php程序的时候会发现 Fatal Error: Out of memory 这样的提示,这有可能是程序中用到了大量了变量和对象,导致分配的内存不够用。 修改php.ini文件里的memory_limit参数 方法一:修改php.ini文件里的memory_limit默认参数128M&…

腾讯联合国家天文台启动探星计划,优图AI可提升120倍数据处理效率
7月9日,2021世界人工智能大会腾讯论坛在上海举办,腾讯云副总裁、腾讯优图实验室总经理吴运声发表了“人工智能的可持续发展之道”主题演讲,宣布全新推出腾讯云TI ONE、TI Matrix、TI DataTruth三大AI底层平台,可以提供包括算法开发…

C++:STL标准入门汇总
学无止境!!! 第一部分:(参考百度百科) 一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R…

C#精髓【月儿原创】第三讲 C#泛型有什么好处
说明:准备出一个系列,所谓精髓讲C#语言要点。这个系列没有先后顺序,不过尽量做到精。可能会不断增删整理,本系列最原始出处是csdn博客,谢谢关注。 C#精髓 第三讲 C#泛型有什么好处 作者:清清月儿 主页:…

腾讯汤道生:人工智能最大的价值是“服务于人”
7月9日,2021世界人工智能大会腾讯论坛在上海拉开帷幕,腾讯高级执行副总裁、云与智慧产业事业群CEO汤道生开场致辞。汤道生表示,人工智能的最大价值是“服务于人”,让衣食住行实现“以消费者为中心”的智慧化供给,让生产…

[转]在Eclipse中使用JUnit4进行单元测试(中级篇)
我们继续对初级篇中的例子进行分析。初级篇中我们使用Eclipse自动生成了一个测试框架,在这篇文章中,我们来仔细分析一下这个测试框架中的每一个细节,知其然更要知其所以然,才能更加熟练地应用JUnit4。 一、 包含必要地Package…

linux下磁盘镜像软件DRBD的使用
一、 什么是DRBD DRBD的全称为:Distributed Replicated Block Device (DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与…

ASP.NET2.0轻松搞定统计图表【月儿原创】
ASP.NET2.0轻松搞定统计图表 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.3.27 本文讲述如何绘制条形图,折线图,柱形图,面积图等常见图形。 效果图: 手把手…

基于 Python 的 8 种常用抽样方法
抽样是统计学、机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到。所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本。上面所说的…

RegularExpressions(4) RegularExpressions 成员(一)
为什么80%的码农都做不了架构师?>>> 主要成员有: IRegex、ICapture、IMatch、IMatchCollection、IGroup、IGroupCollection 先看: ICapture; 常用的 IMatch、IGroup 都是从它继承而来; 作为一个底层接口一般不会被直接使用. 它为 IMatch、IGroup 提供了…