Android Notification 基础

 

在Android中,基本的Notification就是有事件发生的时候在屏幕顶端的Notification bar上显示一个图标。然后拉下Notification bar,点击Notification的项目,会调用相应的程序做处理。比如有新短信,就会出现短信的图标,拉下Notification bar,点击图标会调用短信查看程序。

 

我们先看一下Notification的Sample Code,然后逐行做解说,大致能了解它的基本构成。

 

 

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;

...

private void showNotification(Message msg, int id) {
		NotificationManager notiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		Notification notification = new Notification(R.drawable.notiicon, msg
				.getTitle(), System.currentTimeMillis());
		notification.flags = Notification.FLAG_AUTO_CANCEL;
		Intent intent = new Intent(this, MainActivity.class);
		Bundle bundle = new Bundle();
		bundle.putString("info", msg.getInfo());
		intent.putExtras(bundle);
		intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
				| Intent.FLAG_ACTIVITY_NEW_TASK);
		PendingIntent contentIntent = PendingIntent.getActivity(this, id,
				intent, PendingIntent.FLAG_UPDATE_CURRENT);

		notification.setLatestEventInfo(this, msg.getTitle(), msg.getInfo(),
				contentIntent);
		notiManager.notify(id, notification);
	}

 

 

首先导入三个类,Notification,NotificationManager,PendingIntent。 值得一提的是PendingIntent,它可以看做是Intent这封信的一个信封。PendingIntent基本上是Intent的包装和描述,对象收到PendingIntent后,可以得到其中的Intent再发出去。

 

NotificationManager notiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

上面这一句,从系统中获得Notification服务,getSystemService()就是这么用,来获得系统服务的。

 

Notification notification = new Notification(R.drawable.notiicon, msg
				.getTitle(), System.currentTimeMillis());
		notification.flags = Notification.FLAG_AUTO_CANCEL;

 

然后是构造一个Notification,包括三个属性,图标,图标后面的文字,以及Notification时间部分显示出来的时间,通常使用当前时间。FLAG_AUTO_CANCEL说明Notification点击一次就消失。

 

Intent intent = new Intent(this, MainActivity.class);
		Bundle bundle = new Bundle();
		bundle.putString("info", msg.getInfo());
		intent.putExtras(bundle);
		intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
				| Intent.FLAG_ACTIVITY_NEW_TASK);

 

上面这部分Code,构造一个Intent,并且放进去一条信息。 FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_NEW_TASK者两个FLAG表示优先寻找已经打开的应用,如果应用没有打开那么启动它。

 

PendingIntent contentIntent = PendingIntent.getActivity(this, id,
				intent, PendingIntent.FLAG_UPDATE_CURRENT);

这一句代码把Intent包装在PendingIntent里,this是Context,id是PendingIntent的标志,如果id相同会被认为是一个。FLAG_UPDATE_CURRENT是指后来的PendingIntent会更新前面的。

 

notification.setLatestEventInfo(this, msg.getTitle(), msg.getInfo(),
				contentIntent);
		notiManager.notify(id, notification);

最后这两行添加状态栏的详细信息,包装PendingIntent给Notification,最后发送Notification。

时间: 2024-12-29 05:01:28

Android Notification 基础的相关文章

Android零基础入门第2节:Android 系统架构和应用组件那些事

原文:Android零基础入门第2节:Android 系统架构和应用组件那些事  继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件.   一.Android 系统架构 Android系统的底层建立在Linux系统之上,该平台由操作系统.中间件.用户界面和应用软件4层组成,它采用一种被称为软件叠层(Software Stack)的方式进行构建.这种软件叠层结构使得层与层之间相互分离,明确各层的分工.这种分工保证了层与层之间的低耦合,当下层的层内或层

Android零基础入门第58节:数值选择器NumberPicker

原文:Android零基础入门第58节:数值选择器NumberPicker    上一期学习了日期选择器DatePicker和时间选择器TimePicker,是不是感觉非常简单,本期继续来学习数值选择器NumberPicker .     一.NumberPicker概述       NumberPicker 是用于选择一组预定义好数字的组件,用户既可以通过键盘输入数值,也可以通过滚动来选择数值.     NumberPicker的常用方法如下: setMinValue(int minVal):

Android零基础入门第3节:带你一起来聊一聊Android开发环境

原文:Android零基础入门第3节:带你一起来聊一聊Android开发环境 工欲善其事,必先利其器.Android开发人员在自己的计算机上编写和测试应用程序,然后将其部署到实际的设备上,那首先必不可少的就是开发环境的搭建. 前两期分别总结了Android的前世今生和Android的系统架构和应用组件,那么从本期开始分多次总结分享Android的开发环境搭建,为后续Android开发的学习做好准备工作.   Android的常用开发环境如下图所示:   01.电脑硬件准备 首先来看一下官方推荐的

Android零基础入门第1节:Android的前世今生

原文:Android零基础入门第1节:Android的前世今生 现在网上有很多各色Android资料了,但相对来说还是比较零散,Android覆盖的范围极广,最近刚好有机会全部拉通整理一遍,也保存起来方便后期学习. 这一系列资料从最初的Android认识到Android高级开发,会免费共享出来分享给大家,包括中间会涉及到的一些源码.今天这是开篇,赶紧上车一起来聊一聊Android的前世今生.   一.IT行业发展几个阶段   IT行业是个年轻的行业,共总也才60多年时间,大致分为硬件.软件.互联

Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址

Android BLE与终端通信(一)--Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址 Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端通信技术,无奈一直心不在此,但是真当自己要使用的时候还是比较迷茫,所以最近也有意向来学习这一块,同时,把自己的学习经历分享出来 一.摘要 Android智能硬件前几年野一直不温不火的,到了现在却热火朝天了,各种智能手环,智能手表,智能家居等,而使用BLE这个方向也越来越多,而这方面的资料却是真的很少

Android零基础入门第18节:EditText的属性和使用方法

原文:Android零基础入门第18节:EditText的属性和使用方法 EditText与TextView非常相似,它甚至与TextView 共用了绝大部分XML属性和方法.EditText与TextView的最大区别在于:EditText可以接受用户输入. 一.EditText简介 EditText支持的XML属性及相关方法见TextView表中介绍的与输入有关的属性和方法,其中比较重要的一个属性是inputType,用于为EditText设置输入类型,其属性值主要有以下一些. androi

Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

原文:Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌 通过前两期的学习,我们可以正确搭建好Android Studio的开发环境,也创建了HelloWorld工程并成功运行,那么本期就带你一起来了解这款强大的IDE开发工具吧.     一.Android Studio主页面板   重新打开Android Studio会进入如下主页面,与第一次打开有略微差别. 从上图可以看到,一共有四大区域,接下来分别简单介绍: 区域1为最近新建或打开的Android Stu

《Android Studio应用开发实战详解》——第1章,第1.2节Android系统基础

1.2 Android系统基础 Android一词最早出现于法国作家Auguste Villiers de l'Isle-Adam在1886年发表的科幻小说<未来夏娃>中,他将外表像人的机器起名为Android.本书的主角就是Android系统,在本节将简要介绍Android系统的诞生和发展历程. 1.2.1 Android系统的发展现状 从2008年HTC和Google联手推出第一台Android手机G1开始,在2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一

Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

原文:Android零基础入门第14节:使用高速Genymotion,跨入火箭时代 无论是使用Eclipse,还是Android Studio,使用自带的Android模拟器,不仅很费电脑内存,模拟器开机和运行程序的速度很慢,严重影响开发效率.那么相信,通过本期的学习,可以完美的解决这个问题. Genymotion是一套完整的工具,它提供了Android虚拟环境,是开发者.测试人员.推销者甚至是游戏玩家的福音.Genymotion支持Windows.Linux和Mac OS等操作系统,容易安装和