`
aspnetwinform
  • 浏览: 89800 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

消息栏通知(Notification)介绍

 
阅读更多

用过安卓的应该对通知栏消息都很熟悉了,下面是演示通知栏消息的一个Demo,首先来看一下界面,后面是代码,解释就都放在代码里了.

java代码

package jason.notification;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	Button button;int id = 0;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.notify);
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				//获得通知管理器
				NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
				//构建一个通知对象(需要传递的参数有三个,分别是图标,标题和 时间)
				Notification notification = new Notification(R.drawable.ic_launcher,"通知",System.currentTimeMillis());
				Intent intent = new Intent(MainActivity.this,MainActivity.class);
				PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,0);						                          notification.setLatestEventInfo(getApplicationContext(), "通知标题", "通知显示的内容", pendingIntent);
				notification.flags = Notification.FLAG_AUTO_CANCEL;//点击后自动消失
				notification.defaults = Notification.DEFAULT_SOUND;//声音默认
				manager.notify(id, notification);//发动通知,id由自己指定,每一个Notification对应的唯一标志
				//其实这里的id没有必要设置,只是为了下面要用到它才进行了设置

			}
		});
	}
}




对于通知的结构下面有个图很好的进行了标注;


以下是每个部分的说明:

1. 内容标题

2. 大型icon

3. 内容text

4. 内容info

5. 小型icon

6. 发布通知的时间。你能使用setWhen()设置一个明确的值。

下面再具体的记录一下其他细节

我们可以为Notification指定它的图标,标题,时间,提醒方式,点击之后的动作。还能做什么呢

1、由于每个Notification的ID是唯一的,所以我们可以删除某些通知:

manager.cancel(id, notification);

2、同理,通过重复发送相同ID的Notification,我们还可以更新某些通知:

manager.notify(id, new_notification);

3由于Notification的包装内容为Intent,我们就可以方便地为通知被点击的触发的事件传值:

现在回到下面的位置来

PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,new Intent(MainActivity.this,MainActivity.class),0);

注意最后一个“0”,0表示什么?表示什么都不做,下次你传进来的Intent,如果被发现是同一个Intent,则所有通知都保持为同一个Intent,只是新来的Extra被保留了。

我们应该期望每个Notification都能干点不一样的事情,按上面的方式这样来,每个具备相同Intent的Notification相互之间,其实是毫无区别的。

好,我们来看下除了0以外Android还有什么设置:

1、PendingIntent.FLAG_UPDATE_CURRENT

如果该PendingIntent已经存在,则用新传入的Intent的Extra更新当前的数据。

2、PendingIntent.FLAG_ONE_SHOT

send()只能被执行一次,即是说,假如该通知点击后不消失,那么再次点击不会发生任何事。

3、PendingIntent.FLAG_NO_CREATE

如果该PendingIntent不存在,直接返回null而不是创建一个PendingIntent.

4、PendingIntent.FLAG_CANCEL_CURRENT

如果该PendingIntent已经存在,则在生成新的之前取消当前的。

嗯,明显都不是我们想要的。

其实答案根本不在PendingIntent包装上。

PendingIntent所做的全部事情都只是对同样的Intent进行处理,关键词,在于“同样的”

既然每次你打开的都是同一个Intent,那区分PendingIntent就没有意义了

所以,在Intent定义的时候,你还需要区分Intent

推荐方式:

intent.setData(Uri.parse("custom://"+System.currentTimeMillis()));

这样就实现了Intent的区别化,以后每次传入的Intent都会具备不同的Extra,当然,PendingIntent需要定义为PendingIntent.FLAG_UPDATE_CURRENT

到这个地方,其实还剩下一个问题,很快你就会发现

每次点击通知,都正确的弹出你要的Activity,但是之前的打开的Activity依旧存在

方法有二:

1、在Activity的onPause()方法体中增加:

finish();

这样,在打开新的Activity的时候,旧的就进入了暂停态,启动onPause(),然后执行finish(),活动结束

好吧,这是个蠢办法,请不要使用

2、设置Intent:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

是的,这句就够了,这里我得说一下Activity的栈机制:

我们先来看看Intent的结构new Intent(MainActivity.this,MainActivity.class);

第一个参数为产生该意图(Intent)的活动,这个逻辑再清晰不过了,要做的事情得有个发出的主体

第二个参数为该意图的对象,即是这个意图是什么,我们来看看。

呃!??这里没有对象……

是的,我们只有了一个对象的类名,但远远不是某个具体的对象,这是反射么?反射能通过一个类名来找到某个特定的类实例么?

事实如下:

Android有一个栈机制,每个产生的活动在过了产生期后,都会进入这个栈,新的活动压着旧的活动,每一次寻找类名的时候,都默认提取的是栈顶的活动。这也是为什么Android能快捷的执行返回操作。

回到原点来,我们为Intent添加:

openintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

之后,这个意图一旦产生,就会自动清除栈顶的活动,即是说,上一个被打开的活动会被终结掉,于是就实现了没有两个相同的活动被同时打开。

分享到:
评论

相关推荐

    android消息通知栏Notification

    在Android系统中,`Notification`是开发者用于向用户展示非交互式信息的重要工具,它通常出现在状态栏中,用户可以通过下拉通知栏查看并交互。`Notification`可以在应用不处于前台运行时,依然向用户传达重要的消息...

    Android 8.0通知栏(Notification)适配

    这几天做一个小软件在API28(Android 9.0)的模拟器上测试时,发现通知栏无效,经过一番查询,了解到:API26(Android 8.0)以后,引入了**通知渠道(Notification Channels)**这么一个东西来帮助用户管理通知。...

    Android实现Notification的通知栏常驻.zip

    本教程将详细介绍如何在Android中实现一个常驻通知栏的Notification,以确保即使在用户关闭应用后,该通知仍然可见。 一、Notification的基本结构 1. **Notification channels**: 从Android O(8.0)开始,每个...

    实现Notification的通知栏常驻

    常驻Notification是指即使用户关闭了应用程序,Notification仍然保留在通知栏,持续提醒用户有未处理的事件。本教程将深入探讨如何实现这样一个常驻通知栏的Notification。 首先,我们需要了解Notification的基本...

    状态栏通知小图标,notification通知

    状态栏通知小图标,通常被称为`Notification`,是Android系统中一种重要的用户界面元素,用于在状态栏上显示应用的提醒或消息。这些小图标在用户不与应用直接交互时提供了一个简短的信息提示,帮助用户了解应用的...

    安卓消息推送通知栏相关-状态栏通知小图标notification通知.rar

    这个压缩包“安卓消息推送通知栏相关-状态栏通知小图标notification通知.rar”包含了一些关于Android通知(Notification)的实现代码和资源,可能用于帮助开发者理解和创建自定义的通知。下面将详细阐述Android通知...

    通知栏(Notification)使用介绍及案例

    本教程将深入探讨Android的通知栏(Notification)使用,通过三个实例来帮助你理解和应用这一关键功能。 首先,我们要了解`Notification`类是Android SDK中的核心组件,用于在状态栏上创建和管理通知。创建一个通知...

    安卓消息推送通知栏相关-Eclipse的关于通知notification的小应用源码有注释供参考.rar

    本资源为"Eclipse的关于通知notification的小应用源码有注释供参考",虽然无法逐一验证每个文件的可用性,但它提供了学习和参考的价值。 1. **Notification API简介** Android的通知机制是通过Notification类来...

    音乐播放器消息通知栏切歌栏效果(Notification+BroadcastReceiver).zip

    这个“音乐播放器消息通知栏切歌栏效果”项目就是针对这一需求的实例,它巧妙地结合了Notification和BroadcastReceiver这两个关键组件。下面将详细解析这个项目的知识点。 首先,`Notification`是Android系统提供的...

    安卓消息推送通知栏相关-一个多功能方便好用的notification通知栏通知开源库.rar

    首先,Android的通知栏通知主要通过`Notification`类来实现。这个开源库可能封装了`Notification`的创建和管理过程,简化了开发者的工作。通常,创建`Notification`需要设置诸如图标、标题、内容、点击动作等信息。...

    Android高级应用源码-状态栏通知小图标,notification通知.zip

    在Android开发中,状态栏通知(Notification)是与用户交互的一种重要方式,它可以在应用程序后台运行时向用户提供信息。此压缩包"Android高级应用源码-状态栏通知小图标,notification通知.zip"显然包含了关于如何...

    javascript 实现 Notification 消息通知框

    使用javascript 封装实现 Notification 消息通知框

    实现Notification的通知栏常驻.rar

    在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏显示提醒,即使用户不在应用程序中,也能让用户了解到应用的新消息或者状态更新。"实现Notification的通知栏常驻"这个主题,主要涉及如何...

    notification-Android带按钮自定义通知栏

    在Android开发中,通知栏(Notification)是向用户传达应用后台事件或信息的重要途径。一个标准的通知通常包含标题、文本内容以及可选的附加操作。然而,为了提供更丰富的交互体验,开发者有时需要创建自定义通知,...

    Android自定义通知栏Notification

    在Android开发中,自定义通知栏Notification是一种提升用户体验的重要手段。Notification是系统级的消息提示,它可以在用户不直接与应用交互时提供信息,比如在状态栏显示消息、更新或者提醒。本项目“Android自定义...

    android 状态栏通知(Notification)的默认和自定义

    本篇文章将详细介绍如何实现Android状态栏通知的默认形式以及自定义设置。 首先,创建默认状态栏通知相对简单。在Android中,我们需要使用`NotificationCompat.Builder`类来构建通知。以下是一个基本示例: ```...

    Android 通知栏Notification的全面整合学习(各种姿势都有,供您选择)

    在Android系统中,通知栏(Notification)是一种至关重要的交互手段,它允许应用在不干扰用户当前操作的情况下,向用户传达信息或提醒。本资源包针对Android通知栏的使用进行了全面整合,涵盖了各种应用场景和实现...

    安卓消息推送通知栏相关-状态栏Notification简单Demo.rar

    本资源"状态栏Notification简单Demo.rar"提供了一个关于如何在Android应用中实现通知栏消息推送的实例。由于无法逐一验证所有代码,这里将详细介绍`Notification`的基本使用方法和核心概念,帮助开发者理解和学习。 ...

    安卓消息推送通知栏相关-实现Notification的通知栏常驻.zip

    这个压缩包"安卓消息推送通知栏相关-实现Notification的通知栏常驻.zip"包含了实现这一功能的相关资源,如JavaApk源码说明.txt、点这里查看更多优质源码~.url以及一个名为NotificationTest的文件或类。这里我们将...

    Android 之 Notification 通知消息

    在Android系统中,Notification是应用与用户交互的重要方式,它能够在状态栏中显示消息,即使应用在后台运行也能提醒用户有新的活动或者信息。本文将深入探讨`Android 之 Notification 通知消息`的相关知识点,包括...

Global site tag (gtag.js) - Google Analytics