Notification —— 通知,是一种让你的应用程序在不使用Activity的情况下警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。 Notification 是由NotificationManager(系统服务)统一管理的。
一般来说,一个Notification应该传送的消息包括:
1 、一个状态条图标
2、在拉伸的状态栏窗口中显示额外的信息和启动一个Application的Intent
3、闪灯或LED
4、电话震动
在状态栏(Status Bar)中,通知主要有两类(使用FLAG_标记,后面讲解到):
1、正在运行的事件
2、通知事件
Notification图解如下:
![](http://hi.csdn.net/attachment/201111/1/0_1320146168XEa4.gif)
Notification类介绍:
常量:
//表示发送一个Notification的所携带的效果
DEFAULT_ALL 使用默认字段
DEFAULT_LIGHTS 默认闪光
DEFAULT_SOUND 默认声音(uri,指向路径)
DEFAULT_VIRATE 默认震动,后来得知需要添加震动权限VIBRATE: android.permission.VIBRATE
PS:以上的效果常量可以累加,即通过mNotifaction.defaults |=DEFAULT_SOUND (有些效果只能在真机上才有,比如震动)
//设置Flag位
FLAG_AUTO_CANCEL该通知能被状态栏的清除按钮给清除掉
FLAG_NO_CLEAR该通知不能被状态栏的清除按钮给清除掉
FLAG_ONGOING_EVENT通知放置在正在运行
常用字段
contentView通知在状态栏的显示View(自定义,具体请看下文) ,常与contentIntent配合使用,点击该通知后,
即触发contentIntent
contentIntent设置PendingIntent对象,点击该通知时发送该Intent
flags设置flag位,例如FLAG_NO_CLEAR等
defaults 添加效果
tickerText显示在状态栏中的文字
when发送此通知的时间戳
icon设置图标
常用方法介绍:
void setLatestEventInfo(Context context , CharSequence contentTitle,CharSequencecontentText,PendingIntent
contentIntent)
功能: 显示在拉伸状态栏中的Notification属性,点击后将发送PendingIntent对象。
参数: context上下文环境
contentTitle 状态栏中的大标题
contentText 状态栏中的小标题
contentIntent 点击后将发送PendingIntent对象
另外的就是Notification的几步不同构造方法了,其构造方法的参数含义如上,请参考SDK 。
注意,关于通知(Notification)的显示类型有两种:
第一种:使用默认的形式(效果图如上显示)。具体使用是为Notification对象设置setLatestEventInfo()方法(该方法内部创建
了默认的RemoteViews对象,因此为默认显示),否则程序会报异常 ;
第二种: 使用自定义的View(RemoteViews对象)显示(功能更加自由,强大),具体方法为设置Notification对象的
contentView 属性和contentIntent属性
,此时不需要设置setLatestEventInfo()方法。具体使用方法如下:
-
Notificationnoti=newNotification(icon,title,when+10000);
-
noti.flags=Notification.FLAG_INSISTENT;
-
-
-
RemoteViewsremoteView=newRemoteViews(this.getPackageName(),R.layout.notification);
-
remoteView.setImageViewResource(R.id.image,R.drawable.icon);
-
remoteView.setTextViewText(R.id.text,"Hello,thismessageisinacustomexpandedview");
-
noti.contentView=remoteView;
-
-
-
-
PendingIntentcontentIntent=PendingIntent.getActivity
-
(MainActivity.this,0,newIntent("android.settings.SETTINGS"),0);
-
noti.contentIntent=contentIntent;
本文采用的RemoteViews资源文件如下:/layout/notification.xml
-
<?xmlversion="1.0"encoding="utf-8"?>
-
-
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
android:orientation="horizontal"android:layout_width="fill_parent"
-
android:layout_height="fill_parent">
-
-
<ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"
-
android:layout_height="fill_parent"/>
-
-
<TextViewandroid:id="@+id/text"android:layout_width="wrap_content"
-
android:layout_toRightOf="@+id/image"
-
android:layout_height="wrap_content"android:textColor="#000"/>
-
-
<ProgressBarandroid:id="@+id/progress_horizontal"
-
style="?android:attr/progressBarStyleHorizontal"
-
android:layout_below="@+id/text"
-
android:layout_toRightOf="@+id/image"
-
android:layout_width="fill_parent"android:layout_height="wrap_content"
-
android:max="100"android:progress="50"android:secondaryProgress="75"/>
-
-
-
</RelativeLayout>
效果图如下:
![](http://hi.csdn.net/attachment/201201/11/0_13262877534D97.gif)
前面我们说过,NotificationManager是所有Notification的大管家,它的主要职责是加入/移除Notification。
NotificationManager类
通过获取系统服务来获取该对象:
NotificationManager mNotificationManager = (NotificationManager)getSystemServic(Context.NOTIFICATION_SERVICE) ;
常用方法:
public void cancelAll() 移除所有通知(只是针对当前Context下的Notification)
public voidcancel(int id) 移除标记为id的通知 (只是针对当前Context下的所有Notification)
public voidnotify(String tag ,int id, Notification notification) 将通知加入状态栏, 标签为tag,标记为id
public voidnotify(int id, Notification notification)将通知加入状态栏,,标记为id
Demo如下:
说明:示例Demo演示了创建两种不同类型的Notification , 实现起来也是很简单的。其实说到两种不同类型的使用
方式 ,其实内部原理是差不多的。
PS :自定义Notification复用了文章之前的布局文件,请知晓。
-
packagecom.feixun.qin;
-
-
importandroid.app.Activity;
-
importandroid.app.Notification;
-
importandroid.app.NotificationManager;
-
importandroid.app.PendingIntent;
-
importandroid.content.BroadcastReceiver;
-
importandroid.content.Context;
-
importandroid.content.Intent;
-
importandroid.content.IntentFilter;
-
importandroid.net.Uri;
-
importandroid.os.Bundle;
-
importandroid.provider.MediaStore.Audio;
-
importandroid.util.Log;
-
importandroid.view.View;
-
importandroid.widget.Button;
-
importandroid.widget.RemoteViews;
-
importandroid.widget.RemoteViews.RemoteView;
-
-
publicclassMainActivityextendsActivity{
-
-
privateButtonsendNotiBt;
-
privateintcount=0;
-
-
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
sendNotiBt=(Button)findViewById(R.id.sendNotiBt);
-
sendNotiBt.setOnClickListener(newView.OnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
showDefaultNotification();
-
}
-
});
-
}
-
-
-
privatevoidshowCustomizeNotification(){
-
-
CharSequencetitle="iamnew";
-
inticon=R.drawable.icon;
-
longwhen=System.currentTimeMillis();
-
Notificationnoti=newNotification(icon,title,when+10000);
-
noti.flags=Notification.FLAG_INSISTENT;
-
-
-
-
RemoteViewsremoteView=newRemoteViews(this.getPackageName(),R.layout.notification);
-
remoteView.setImageViewResource(R.id.image,R.drawable.icon);
-
remoteView.setTextViewText(R.id.text,"通知类型为:自定义View");
-
noti.contentView=remoteView;
-
-
-
-
PendingIntentcontentIntent=PendingIntent.getActivity
-
(MainActivity.this,0,newIntent("android.settings.SETTINGS"),0);
-
noti.contentIntent=contentIntent;
-
-
NotificationManagermnotiManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
-
mnotiManager.notify(0,noti);
-
-
}
-
-
-
privatevoidshowDefaultNotification(){
-
-
CharSequencetitle="iamnew";
-
inticon=R.drawable.icon;
-
longwhen=System.currentTimeMillis();
-
Notificationnoti=newNotification(icon,title,when+10000);
-
noti.flags=Notification.FLAG_INSISTENT;
-
-
-
NotificationmNotification=newNotification();
-
-
-
mNotification.icon=R.drawable.icon;
-
mNotification.tickerText="NotificationTest";
-
mNotification.when=System.currentTimeMillis();
-
-
-
-
-
-
mNotification.defaults|=Notification.DEFAULT_SOUND;
-
-
-
-
-
-
-
-
-
-
-
mNotification.flags=Notification.FLAG_INSISTENT;
-
-
-
PendingIntentcontentIntent=PendingIntent.getActivity
-
(MainActivity.this,0,newIntent("android.settings.SETTINGS"),0);
-
mNotification.setLatestEventInfo(MainActivity.this,"通知类型:默认View","一般般哟。。。。",contentIntent);
-
-
-
NotificationManagermNotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
-
-
-
-
mNotificationManager.notify(2,mNotification);
-
-
}
-
-
privatevoidremoveNotification()
-
{
-
NotificationManagermNotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
-
-
mNotificationManager.cancel(2);
-
}
-
}
-
-
-
-
-
-
-
分享到:
相关推荐
下面我们将详细讲解Android通知Notification,并给出实例代码。 1. **创建Notification** 创建Notification通常使用`Notification.Builder`类,这是一个构建器模式,允许我们设置各种属性。首先,必须设置`...
【Android 开发工程师测试知识点详解】 1. **Activity**: - Activity是Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider)之一。 - 它通常作为一个Java类实现,用于构建用户界面并与...
Android 中 Notification 通知用法详解 Android 中的 Notification 通知用法是指应用程序通过 NotificationManager 对象来管理和显示通知的方式。Notification 是 Android 系统中一个比较有特色的功能,当某个应用...
在实际应用中,通常还需要考虑更多高级特性,如自定义视图、设置优先级、使用通知渠道(Android 8.0 及以上版本)、设置定时发送等。例如,你可以通过 `Notification.Builder` 类来构建更复杂的 `Notification`,并...
本篇文章将深入解析Android开发中关于Notification的通知用法,包括其功能、参数、定义以及如何使用。 首先,创建一个Notification需要使用`Notification`类。在Android中,Notification包含以下关键组件: 1. **...
当有消息通知时,状态栏会显示通知的图标和文字,通过下拉状态栏,就可以看到通知信息了,Android这一创新性的UI组件赢得了用户的一 致好评,就连苹果也开始模仿了。今天我们就结合实例,探讨一下Notification具体的...
4. **0400_第四部分:Android应用开发**:这部分可能深入到实际应用开发的各个方面,如UI设计(使用XML布局和ConstraintLayout)、动画效果、通知(Notification)、后台运行(Background Execution Limits)、手势...
本篇文章将深入讲解如何在Android中使用Notification。 首先,创建一个Notification需要以下步骤: 1. **构建Notification对象**: - 首先,你需要通过`NotificationCompat.Builder`类来创建一个Notification对象...
状态栏通知在Android开发中是用户与应用交互的重要方式,它可以在不干扰用户当前操作的情况下,提供信息提示。本文将详细解析如何使用`Notification`和`NotificationManager`这两个关键类来实现状态栏通知。 首先,...
Notification是Android系统中用于向用户显示提醒的一种重要机制。它允许应用程序即使在后台运行或未启动的情况下,也能向用户传达重要信息。Notification类是构建和管理这些通知的核心组件,而Notification.Builder...
Android Notification使用方法总结 Android Notification是Android系统中的一种重要机制,用于向用户显示重要信息,例如来自应用程序的更新、警报、提醒等。下面是Android Notification使用方法总结的相关知识点: ...
Android四大组件详解 Android 应用程序由一些零散的有联系的组件组成,通过一个工程 manifest 绑定在一起。在 manifest 中,描述了每一个组件以及组件的作用,其中有 6 个组件,它们是 Android 应用程序的基石: ...
"Android应用开发详解教材源码--18个单元70多个实例源码"是一个专门为Android初学者和进阶者设计的学习资料库,它涵盖了从基础到高级的广泛主题,帮助开发者深入理解Android平台的工作原理。 这个压缩包包含18个...
主要介绍了详解Android中使用Notification实现进度通知栏(示例三),具有一定的参考价值,有兴趣的可以了解一下。
Android 通知使用权(NotificationListenerService)是 Android 操作系统中的一种特殊权限,它允许应用程序监听和管理系统中的通知。这种权限是从 Android 4.3 开始引入的,并在 Android 4.4 中扩展了其功能,允许应用...
在Android开发中,Notification的合理使用能提升用户体验,让用户即使在后台也能了解应用的状态和新消息。本篇将深入讲解Notification的相关知识点。 一、Notification的基本结构 Notification由三部分组成:通知...
在消息通知时,我们经常用到...当有消息通知时,状态栏会显示通知的图标和文字,通过下拉状态栏,就可以看到通知信息了,Android这一创新性的UI组件赢得了用户的一致好评,就连苹果也开始模仿了。