`
lovelydog
  • 浏览: 91875 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Android Notification详解——响应notification事件

阅读更多

上一篇讲了如何创建并显示一个notification,这一篇就总结下点击notification后,程序应该如何响应。

 

一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在PendingIntent中设置好的。

经常玩Android手机的应该都有印象,在日历应用中,你新建一个提醒,当提醒通知收到后,你点击通知,会进入提醒的内容页面,如果这个时候按back键,会直接退出应用。

但是在Gmail的应用中,如果有一封新邮件到来,那么点击通知后,会进入到邮件的内容页面,等你看完邮件,点击back键,会退到邮件列表页面,再按back键,才会退出应用。

 

我们总结一下两种情况,假设我们的应用有两个Activity(ParentActivity、SubActivity),notification中设置打开的Activity为SubActivity。

那么第一种情况就是:

点击Notification ——>进入SubActivity ——> back键 ——> 退出应用

第二种情况:

点击Notification ——>进入SubActivity ——> back键 ——> 退到ParentActivity ——>back键 ——>退出应用

 

第一种情况比较简单,只需要在PendingIntent中指定Activity,不需要其他设置,Android默认的就这样。

 

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,  intent, PendingIntent.FLAG_CANCEL_CURRENT);

但是在创建PendingIntent的时候需要注意参数PendingIntent.FLAG_CANCEL_CURRENT

这个标志位用来指示:如果当前的Activity和PendingIntent中设置的intent一样,那么久先取消当前的Activity,用PendingIntent中指定的Activity取代之。

另外,需要在Manifest中对指定的Activity设置属性

 

<activity android:name=".SubActivityl"
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true">
</activity>
 

 

第二种情况稍微复杂点,因为如果只打开一个SubActivity,程序并没办法知道他的上一级Activity是谁,所以需要在点击Notification时打开一组Activity,但是我们并不需要一个个去调用startActivity方法,PendingIntent提供了个静态方法getActivities,里面可以设置一个Intent数组,用来指定一系列的Activity。

所以我们首先写一个函数创建一个Activity数组:

 

Intent[] makeIntentStack(Context context) {
	Intent[] intents = new Intent[2];
	intents[0] = Intent.makeRestartActivityTask(new ComponentName(context, com.example.notificationtest.MainActivity.class));
	intents[1] = new Intent(context,  com.example.notificationtest.SubActivity.class);
	return intents;
}

 

 其中需要注意的是Intent.makeRestartActivityTask方法,这个方法用来创建activity栈的根activity

接下来,创建并显示Notification:

 

void showNotification(Intent intent) {
	Notification notification = new Notification(
			R.drawable.status_icon, 
			"Hello World ticker text",
			System.currentTimeMillis());

	PendingIntent contentIntent = PendingIntent.getActivities(
			this,
			0,
			makeIntentStack(this), 
			PendingIntent.FLAG_CANCEL_CURRENT);
	notification.setLatestEventInfo(
			this, 
			"Title",
			"Hey, shall we have a dinner tonight", 
			contentIntent);
	notification.flags |= Notification.DEFAULT_ALL;

	mNM.notify(1, notification);
}
 

 

分享到:
评论
2 楼 Aries_bingo 2014-09-18  
你好,为什么我这不设置了连个intent 但是都只是跳转到intent[1]上,而返回finish intent[1]的activity 没有跳转到intent[0]上
1 楼 renpingqing 2014-09-07  
[b][b][/b][/b][size=medium][/size]

相关推荐

    android用户界面之Notification教程实例汇总

    第十九讲:AndroidNotification的使用入门** - **链接**: [http://www.apkbus.com/android-725-1-1.html](http://www.apkbus.com/android-725-1-1.html) - **内容概述**: 这篇文章适合初学者阅读,它从零开始...

    安卓Android源码——绝对给力的源码,在线音乐播放器完整项目.rar

    这个压缩包"安卓Android源码——绝对给力的源码,在线音乐播放器完整项目.rar"提供了完整的源代码,对于学习和理解Android应用程序开发,特别是音乐播放器的实现,具有极大的价值。以下是基于这个项目的一些关键知识...

    Android-API.rar_android_android 中

    《Android API详解——深入解析Android开发核心》 在Android应用开发领域,理解并熟练掌握Android API是至关重要的。"Android-API.rar"是一个压缩包,其中包含了一份名为"Android API.chm"的离线帮助文档,这是一份...

    Android-development.rar_android

    《Android开发详解——Java编程指南》 Android是Google推出的一款开源移动操作系统,广泛应用于智能手机、平板电脑以及智能电视等设备。对于开发者来说,掌握Android开发技术是进入移动应用领域的关键。本教程...

    Android典型技术模块开发详解

    2.2 HelloAndroid详解 2.2.1 程序结构 2.2.2 代码分析 2.3 权限permission 2.4 LogCat日志调试 2.5 示例练习 2.5.1 登录界面 2.5.2 事件处理 2.6 本章小结 第二篇 Android开发关键组件 第3章 Activity(活动) 3.1 ...

    Android代码-D-XXPlayer-android音乐播放器源码.zip

    【Android音乐播放器开发详解】 在移动设备领域,Android操作系统占据主导地位,而音乐播放器作为用户日常使用的重要应用之一,其开发技术自然备受关注。本文将深入探讨基于Android平台的音乐播放器——D-XXPlayer...

    Android L SDK文档

    1. **Material Design**:Android L引入了全新的设计语言——Material Design,强调层次感、响应式交互和动态反馈,为用户带来更丰富的视觉体验。开发者需要掌握新的UI组件和动画机制来适应这一设计风格。 2. **ART...

    android-21.jar

    《Android SDK 5.0(Lollipop)详解:聚焦android-21.jar》 在Android开发者的世界里,每个版本的SDK都承载着一系列新的特性和改进。本文将深入探讨Android 5.0(代号Lollipop)的重要组件——android-21.jar,它是...

    android 音乐播放器

    《Android音乐播放器详解》 Android音乐播放器是Android平台上的一种应用程序,用于播放音频文件,如MP3、AAC等格式的音乐。这类应用通常具备播放、暂停、上一曲、下一曲、快进、倒退、音量控制、播放列表管理等...

    Professional Android Application Development(英文版)

    - **介绍**:详细介绍如何在Android中创建应用程序以及其核心组件之一——活动(Activity)。 - **知识点**: - Activity生命周期管理 - Intent传递数据 - 多Activity之间的交互 - 启动模式与任务栈 - Activity...

    Beginning_Android_4_Application_Development

    这一章节深入探讨了Android应用程序的核心组件——活动(Activity)、片段(Fragment)和意图(Intent)。 - **活动(Activity)**:活动是Android应用中最基本的UI组件,相当于用户界面中的单个屏幕。本章将详细介绍如何...

    MapDemo-master.zip

    《Android应用开发:构建跑步健身APP——MapDemo详解》 MapDemo-master.zip是一个包含Andriod应用程序项目的压缩包,主要用于跑步健身领域的应用开发。在这个项目中,开发者将学习如何利用Android SDK来创建一个...

    catchme:基于Android的C@tchMe客户端

    项目以“catchme-master”命名,暗示了其核心理念——捕捉用户的需求并提供快速响应。通过这个项目,开发者可以学习到如何构建一个完整的Android应用,包括界面设计、数据管理、网络通信等多个方面。 二、技术栈 1...

    MyPushManager源码

    《Androidpn消息推送系统——MyPushManager源码详解》 在移动应用开发中,消息推送是一项至关重要的功能,它能够实现在用户不主动打开应用的情况下,将信息及时推送给用户,提升用户体验。Androidpn(Android Push ...

    LaLaTaxi.zip

    《LaLaTaxi.zip——一款基于Java和Android的打车应用毕业设计详解》 LaLaTaxi.zip是一款专为Android平台设计的打车应用程序,它集成了Java编程语言的精髓,为用户提供便捷、高效的出行服务。这款应用不仅体现了...

    开源项目-DeanThompson-jpush-api-go-client.zip

    《极光推送Golang SDK——DeanThompson-jpush-api-go-client开源项目详解》 在现代移动应用开发中,推送服务已经成为不可或缺的一部分,它能够实时地将消息推送到用户的设备上,提升用户活跃度和交互性。...

    music-app

    Android的Notification API允许我们在状态栏创建音乐播放控件,让用户体验无缝的音乐体验。同时,服务(Service)用于在后台运行音乐播放逻辑。 7. **UI动画与交互** 为了让应用更具吸引力,我们可以使用Android的...

    java大项目源码-java-project1:推送java源代码

    【Java大项目源码——Java-Project1:推送服务源代码详解】 在Java开发领域,一个大型项目往往涉及多个模块和复杂的技术栈。本项目"Java-Project1"是一个以推送服务为核心的Java应用,旨在帮助开发者理解如何构建...

Global site tag (gtag.js) - Google Analytics