`
happy90
  • 浏览: 62187 次
  • 性别: 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 发展史到自定义 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移动应用基础教程—习题答案.docx

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

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

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

Global site tag (gtag.js) - Google Analytics