`
happy90
  • 浏览: 62328 次
  • 性别: Icon_minigender_1
  • 来自: 中国
社区版块
存档分类
最新评论

Android Notification基础知识

阅读更多

转自: http://www.cnblogs.com/newcj/archive/2011/03/14/1983782.html

文章写得不错,所以马克一下。

 

Notification 的使用需要导入 3 个类

 

import android.app.PendingIntent;

import android.app.NotificationManager;

import android.app.Notification;

 

代码示例及说明

 

NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);				
Notification n = new Notification(R.drawable.chat, "Hello,there!", System.currentTimeMillis());				
n.flags = Notification.FLAG_AUTO_CANCEL;				
Intent i = new Intent(arg0.getContext(), NotificationShow.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);			
//PendingIntent
PendingIntent contentIntent = PendingIntent.getActivity(
		arg0.getContext(), 
		R.string.app_name, 
		i, 
		PendingIntent.FLAG_UPDATE_CURRENT);
				
n.setLatestEventInfo(
		arg0.getContext(),
		"Hello,there!", 
		"Hello,there,I'm john.", 
		contentIntent);
nm.notify(R.string.app_name, n);

 

下面依次对每一段代码进行分析:

 

NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

 

创建 NotificationManager,其中创建的 nm 对象负责“发出”与“取消”  Notification。

 

Notification n = new Notification(R.drawable.chat, "Hello,there!", System.currentTimeMillis());				
n.flags = Notification.FLAG_ONGOING_EVENT;	

 

 

创建 Notification ,参数依次为:icon的资源id,在状态栏上展示的滚动信息,时间。其中创建的 n 对象用来描述出现在系统通知栏的信息,之后我们将会看到会在 n 对象上设置点击此条通知发出的Intent。

 

n.flags = Notification.FLAG_AUTO_CANCEL;

 

 

设置 n.flags 为 Notification.FLAG_AUTO_CANCEL ,该标志表示当用户点击 Clear 之后,能够清除该通知。

 

Intent i = new Intent(arg0.getContext(), NotificationShow.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);

 

 

创建一个Intent,该Intent使得当用户点击该通知后发出这个Intent

请注意,如果要以该Intent启动一个Activity,一定要设置 Intent.FLAG_ACTIVITY_NEW_TASK 标记。

 

Intent.FLAG_ACTIVITY_CLEAR_TOP :如果在当前Task中,有要启动的Activity,那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例

Intent.FLAG_ACTIVITY_NEW_TASK :系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task,若有,则在该Task上创建Activity,若没有则新建具有该Activity属性的Task,并在该新建的Task上创建Activity。

//PendingIntent
PendingIntent contentIntent = PendingIntent.getActivity(
		arg0.getContext(), 
		R.string.app_name, 
		i, 
		PendingIntent.FLAG_UPDATE_CURRENT);

PendingIntent 为Intent的包装,这里是启动Intent的描述,PendingIntent.getActivity 返回的PendingIntent表示,此PendingIntent实例中的Intent是用于启动 Activity 的Intent。PendingIntent.getActivity的参数依次为:Context,发送者的请求码(可以填0),用于系统发送的Intent,标志位。

其中 PendingIntent.FLAG_UPDATE_CURRENT  表示如果该描述的PendingIntent已存在,则改变已存在的PendingIntent的Extra数据为新的PendingIntent的Extra数据。

这里再简要说一下 Intent 与 PendingIntent 的区别:

Intent :意图,即告诉系统我要干什么,然后系统根据这个Intent做对应的事。如startActivity相当于发送消息,而Intent是消息的内容。

PendingIntent :包装Intent,Intent 是我们直接使用 startActivity , startService 或 sendBroadcast 启动某项工作的意图。而某些时候,我们并不能直接调用startActivity , startServide 或 sendBroadcast ,而是当程序或系统达到某一条件才发送Intent。如这里的Notification,当用户点击Notification之后,由系统发出一条Activity 的 Intent 。因此如果我们不用某种方法来告诉系统的话,系统是不知道是使用 startActivity ,startService 还是 sendBroadcast 来启动Intent 的(当然还有其他的“描述”),因此这里便需要PendingIntent。

n.setLatestEventInfo(
		arg0.getContext(),
		"Hello,there!", 
		"Hello,there,I'm john.", 
		contentIntent);

 

设置显示在通知下拉框中的信息,参数依次为:Context,标题,内容,PendingIntent。

nm.notify(R.string.app_name, n);

 

启动Notification,参数依次为:在你的程序中标识Notification的id值(用来区分同一程序中的不同Notifycation,如果程序中只有一个Notification那么这里随便你填什么都可以,不过类型必须要为int),要通知的Notification。

如何使自己的Notification像Android QQ一样能出现在 “正在运行的”栏目下面

其实很简单,只需设置Notification.flags = Notification.FLAG_ONGOING_EVENT;便可以了。

如何改变 Notification 在“正在运行的”栏目下面的布局

创建 RemoteViews 并赋给 Notification.contentView ,再把 PendingIntent 赋给 Notification.contentIntent 便可以了,如:

PendingIntent contentIntent = PendingIntent.getActivity(
	arg0.getContext(), 
	R.string.app_name,
	i, 
	PendingIntent.FLAG_UPDATE_CURRENT);
			
RemoteViews rv = new RemoteViews(Main.this.getPackageName(), R.layout.notification_view);
rv.setImageViewResource(R.id.image, R.drawable.chat);
rv.setTextViewText(R.id.text, "Hello,there,I'm john.");
n.contentView = rv;
n.contentIntent = contentIntent;

nm.notify(R.string.app_name, n);

 

注意,如果使用了contentView,那么便不要使用Notification.setLatestEventInfo。如果setLatestEventInfo在赋给 Notification.contentView 的代码之后,那么contentView的效果将被覆盖,显示的便是 setLatestEventInfo 的效果;如果 setLatestEventInfo 在 Notification.contentView 的代码之前,那么显示的便是 Notification.contentView 的效果,也就是说不管你想要setLatestEventInfo 或 contentView 的自定义效果,请保证始终只有一句设置代码,因为在最后一句绑定的时候,之前的设置contentView或setLatestEventInfo的代码都是完全没有必要的。

 

 

 

分享到:
评论

相关推荐

    Android自定义Notification添加点击事件

    在自定义 Notification 中添加点击事件,并不是一个复杂的任务,但是需要我们对 Android 的基础知识有所了解,例如,BroadcastReceiver、PendingIntent 等。通过本文,我们可以了解如何添加点击事件到自定义 ...

    Android Notification.Builder通知案例分享

    2. 需要掌握 Java 语言: Android Notification.Builder 需要开发者具备一定的 Java 语言知识,如 Java 语言基础、 Java 语言高级特性等。 Android Notification.Builder 通知案例是一种非常有用的通知处理机制,...

    android基础知识总结

    ### Android基础知识总结与面试要点详解 #### 一、Android架构概览 Android系统采用分层设计,主要包括五层:应用程序层、应用程序框架层、库和Android运行时、Linux内核。其中,应用程序层包含了预装的应用如电话...

    Android-各种各样的androidNotification效果

    1. **基础Notification创建**: 使用`NotificationCompat.Builder`类可以创建一个基本的通知。首先,我们需要实例化Builder对象,设置通知的标题、内容文本、小图标以及通知的唯一ID。例如: ```java ...

    android Notification

    本文将深入探讨`android Notification`的相关知识点,包括其基本结构、创建过程、通知渠道、通知级别以及自定义样式。 **一、Notification的基本结构** Notification由三部分组成:标题(title)、文本内容(text)...

    Notification

    首先,我们来了解Android通知的基础知识。在Android中,创建通知通常涉及到以下步骤: 1. 创建一个NotificationCompat.Builder对象,它是Android Support Library提供的类,可以兼容不同版本的Android系统。 2. 使用...

    基于Android安卓基础知识点开发的个人记账工具源码.zip

    这个应用可以帮助用户跟踪和管理他们的日常开支,是学习Android开发、理解Android基础知识点以及实际编程实践的好材料。以下是对该源码中涉及的关键知识点的详细说明: 1. **Android SDK**: 这个记账应用是使用...

    android基础知识点总结(文字+代码)

    在Android开发领域,基础知识是构建复杂应用的基石。这篇总结涵盖了Android开发中的核心概念和关键技术,结合了文字解释和代码示例,旨在帮助初学者快速掌握Android开发的基本要领。 一、Android系统架构 Android...

    Android基础知识详解

    Notification 38 对话框 42 一、带三个按钮的对话框 42 二、简单列表对话框、单选列表对话框、多选列表对话框 44 三、水平进度对话框和圆形进度对话框 47 四、自定义对话框 49 Menu菜单 52 选项菜单 52 上下文菜单 ...

    Android基础知识

    ### Android基础知识概览 #### 一、Android的本质与特性 Android是一个专为移动设备设计的软件堆栈,它集成了操作系统、中间件和关键应用程序,形成了一个完整的移动平台。其核心在于提供一个开放且灵活的环境,...

    Android基础笔记

    Android 基础笔记是 Android 开发的入门知识点总结,涵盖了 Android 开发的基础知识点,从 Android 发展史到自定义 ContentProvider 的实现。 一、Android 发展史 Android 的发展史可以追溯到 2003 年,最初由 ...

    android 基础教程(第三版)配套源码

    《Android基础教程(第三版)》是一本深受开发者欢迎的指南,它涵盖了Android开发的核心概念和技术,旨在帮助初学者和有经验的开发者更好地理解和实践Android应用开发。这本书的配套源码提供了丰富的实例,使得读者...

    Android入门到精通知识总结.pdf

    以上只是对Android开发中一些基础和关键知识点的概述,实际开发中还需要深入学习更多高级主题,如Fragment、服务(Service)、广播接收器(BroadcastReceiver)、通知(Notification)、数据库(SQLite)、异步任务...

    多种notification的demo(带注释)

    综上所述,这个demo不仅展示了如何创建基础的`Notification`,还涉及到了自定义和进度条的使用,对于学习Android通知功能的开发者来说非常有帮助。同时,通过注释理解代码也是提升编程技能的重要方式。

    《Android移动开发基础案例教程》PPT.zip

    《Android移动开发基础案例教程》PPT.zip是一个包含Android开发基础知识和案例的压缩文件,适合初学者和希望深入理解Android应用开发的人员学习。在这个PPT教程中,我们可以期待涵盖以下几个核心知识点: 1. **...

    Android UI基础教程pdf

    8. **对话框和通知**:Android提供了多种对话框类型,如警报对话框(AlertDialog)、进度对话框(ProgressDialog)等,以及通知(Notification)系统,用于在状态栏显示消息。 9. **自定义控件**:当标准组件无法...

    android一步一步最基础学习__android新手

    根据给定的文件信息,以下是从标题、描述、标签及部分内容中提炼出的关于Android基础知识的关键知识点: ### Android基础知识概览 #### Android简介 - **基础定义**:Android是一款基于Linux内核的操作系统,专为...

    Android移动应用基础教程—习题答案.docx

    ### Android移动应用基础...以上内容总结了《Android移动应用基础教程》的部分知识点,涵盖了Android的基本概念、UI设计、Activity管理以及数据存储等方面的基础知识。对于初学者来说,掌握这些基础知识是非常重要的。

    Android移动应用开发基础教程(微课版)习题答案1

    【Android 移动应用开发基础】\n\nAndroid 移动...\n\n以上是 Android 移动应用开发基础教程中的关键知识点,掌握这些内容对于初学者来说至关重要,能够帮助他们构建坚实的基础,进而开发出功能丰富的 Android 应用。

Global site tag (gtag.js) - Google Analytics