自定义通知与系统通知的学习(详解)
因为有需求要做非系统通知,所以小马找个时间干脆一起学习了系统默认的通知与自定义通知的实现,吼吼,虽然简单,但开心呀,不多讲,老规矩,先看效果再来看代码:
一:应用刚启动时:
二:查看系统默认接收到通知时的效果图:
三:自定义通知小提示效果图:
四:自定义通知布局与系统默认布局对比
有了效果图后再后代码就简单多了,直接看看代码,小马就直接在源代码里面加了注释,有不妥之处还请朋友们提出来 :
- 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,如需转载请自行联系原作者
自定义通知与系统通知的学习(详解)相关推荐
- 定时任务框架APScheduler学习详解
定时任务框架APScheduler学习详解 APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站 ...
- android自定义view案例,Android自定义View的实现方法实例详解
一.自绘控件 下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次.新建一个CounterView继承自View,代码如下所示: 可以看到,首先我们在 ...
- 音视频编解码学习详解
音视频编解码学习详解 目录(?)[+] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列A ...
- 自定义View之Canvas(画布)的详解
接下来学习一下自定义View之Canvas(画布)的详解 先来看看Canvas常用方法: 功能分类 Canvas常用方法 备注 绘制颜色 drawARGB 通过设置ARGB值绘制颜色 drawRGB ...
- 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述
<繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...
- C语言再学习 -- 详解C++/C 面试题 2
(经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...
- 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解很多小的篇幅,方便阅读.大神博客传送门: ...
- 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像)
get_avat - phpStudy...
WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...
最新文章
- 【 C 】深入了解递归
- Mastering Android NDK Build System - Part 1: Techniques with ndk-build
- oracle sql 艺术,Oracle PL/SQL 从if 到 then的“艺术鉴赏”
- 匈牙利算法c语言代码,漫谈匈牙利算法
- sdut 活动选择问题
- SQL Server对Xml字段的操作
- 【问答系统】QA问答系统(Question Answering)
- 怎么画人像_画动画+耍杂技怎么玩?日本小哥串烧后居然爆火网络
- 自信息量,熵及其性质
- x2检验(chi-square test)或称卡方检验
- 文本数据挖掘----初识数据挖掘
- Oracle 11g 扩展UNDO表空间
- Ubuntu下邮件服务器的配置——SendMail
- [Windows系统]visio安装时提示和即点即用版本不能并行怎么办
- word里如何在□里打√!框框里打勾!!!!!
- 甩开三星自己干,苹果第一块自研屏幕要来了?
- 天平游码读数例题_2019使用天平游码时的读数方法语文
- html 弹出复选框,js点击文本框弹出可选择的checkbox复选框
- 朴素贝叶斯法 - 垃圾邮件分类
- Neo4j Community Edition社区版本下载、安装、使用