`
sdfiyon
  • 浏览: 22195 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android 中的消息通知Notification

 
阅读更多

用惯了Android的人在刚拿到iPhone的时候,总是会习惯性的用手指从状态栏往下拖一下,这都是给Notification闹的。
不过Notification也确实是1个不错的提示工具,不干扰正常的操作,事后还可以再翻看详细的内容,点击后还可以进入相关的画面查看更具体的内容。
今天我就以代码为主的形式来介绍Notification的使用,包括基本用法,自定义的View,以及更多的控制方法。
另一种Android中常用到的提示方法Toast的用法请参见《教程:在Android中使用Toast进行提示》
我们先看下Notification的几个主要组成部分:
Icon:不解释
Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动
Icon和Ticker Text
Content Title:Notification展开后的标题
Content Text:Notification展开后的内容
Content Title和Text

 

Notification的一般用法

取得NotificationManager

private NotificationManager mNotificationManager;
mNotificationManager = (NotificationManager) 
	getSystemService(Context.NOTIFICATION_SERVICE);
  

创建Notification并且显示

//Notification的滚动提示
String tickerText = "My notification, It's a long text! Hello World desiyo?";
//Notification的图标,一般不要用彩色的
int icon = R.drawable.icon_02241_3;
 
//contentTitle和contentText都是标准的Notification View的内容
//Notification的内容标题,拖下来后看到的标题
String contentTitle="My notification";
//Notification的内容
String contentText="Hello World!";
 
//Notification的Intent,即点击后转向的Activity
Intent notificationIntent = new Intent(this, this.getClass());
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
	notificationIntent, 0);
 
//创建Notifcation
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
//设定Notification出现时的声音,一般不建议自定义
notification.defaults |= Notification.DEFAULT_SOUND;
//设定如何振动
notification.defaults |= Notification.DEFAULT_VIBRATE;
//指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身
//这符合一般的Notification的运作规范
notification.flags|=Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);
//显示这个notification
mNotificationManager.notify(HELLO_ID, notification);
  

这是最基本的应用,可以说除了找个合适的图标以外,其它都很简单。

使用自定义View的Notification

同Toast一样,我们也可以自已指定1个View来作为Notification展开后的显示内容,比如说在Android Market中下载的时候,Notification中会显示当前下载的进度,那么我们也来模拟1个这样的效果吧。
首先给出View的定义文件:notification_view_sample.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:padding="3dp"
>
	<ImageView android:id="@+id/notificationImage"
		android:layout_width="wrap_content" android:layout_height="wrap_content"
		android:src="@android:drawable/stat_sys_download"
	/>
	<TextView android:id="@+id/notificationTitle"
		android:layout_width="wrap_content" android:layout_height="wrap_content"
		android:layout_toRightOf="@id/notificationImage"
		android:layout_alignParentRight="true"
		android:paddingLeft="6dp"
		android:textColor="#FF000000"
	/>
	<TextView android:id="@+id/notificationPercent"
		android:layout_width="wrap_content" android:layout_height="wrap_content"
		android:layout_below="@id/notificationImage"
		android:paddingTop="2dp"
		android:textColor="#FF000000"
	/>
	<ProgressBar android:id="@+id/notificationProgress"
		android:layout_width="wrap_content" android:layout_height="wrap_content"
		android:layout_below="@id/notificationTitle"
		android:layout_alignLeft="@id/notificationTitle"
		android:layout_alignParentRight="true"
		android:layout_alignTop="@id/notificationPercent"
		android:paddingLeft="6dp"
		android:paddingRight="3dp"
		android:paddingTop="2dp"
		style="?android:attr/progressBarStyleHorizontal"
	/>
</RelativeLayout>
 
 

接下来是Java代码片段:

//Notification的滚动提示
String tickerText1 = "Custom view for download notification";
//Notification的图标,一般不要用彩色的
int icon1 = android.R.drawable.stat_sys_download;
 
//Notification的Intent,即点击后转向的Activity
Intent notificationIntent1 = new Intent(this, this.getClass());
notificationIntent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent1 = PendingIntent.getActivity(this, 0, notificationIntent1, 0);
 
//创建Notifcation
Notification notification1 = new Notification(icon1, tickerText1, System.currentTimeMillis());
//设定Notification出现时的声音,一般不建议自定义
notification1.defaults |= Notification.DEFAULT_SOUND;
//设定是否振动
notification1.defaults |= Notification.DEFAULT_VIBRATE;
//notification.number=numbers++;
//指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身
//这符合一般的Notification的运作规范
notification1.flags|=Notification.FLAG_ONGOING_EVENT;
 
//创建RemoteViews用在Notification中
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_view_sample);
contentView.setTextViewText(R.id.notificationTitle, "Download:Facebook for android");
contentView.setTextViewText(R.id.notificationPercent, "35%");
contentView.setProgressBar(R.id.notificationProgress, 100, 35, false);
 
notification1.contentView = contentView;
notification1.contentIntent=contentIntent1;
 
//显示这个notification
mNotificationManager.notify(CUSTOM_VIEW_ID, notification1);
 

注意以上代码中使用的是RemoteViews,而不是普通的View,另外使用的是PendingIntent而不是普通的Intent,这都说明了Notification是1个“远程”的东西,其中能够使用的控件是受限制的,比如说TableLayout就不能使用。看下效果图,是不是和 Market中的界面很接近呢?
自定义View的Notification效果图

更好的控制Notification

动画图标怎么做?

和selector类似,定义1个XML文件放在drawable下,下面是之前用到的stat_sys_download的定义:

<animation-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
    <item android:drawable="@drawable/stat_sys_download_anim0" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim1" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim2" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim3" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim4" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim5" android:duration="200" />
</animation-list>
如何更新Notification?

注意到前面的代码中用到的CUSTOM_VIEW_ID,这是Notification的ID,如果2次弹出的Notification的ID相同,那么Notification就只会更新而不会再次滚动提醒。之前给出的ProgressBar是不会动的,利用这个方法就可以让它动起来(或者也可以直接调用RemoteView的set方法来直接更新?未试验)

如何自定义提示的声音和振动?
//自定义提示音
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
//自定义振动方式
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate;

请注意:如果使用了DEFAULT_SOUND或DEFAULT_VIBRATE,则自定义的提示音和振动无效。

在类似于短消息的应用中如何提示数量?

使用Notification的number属性,默认为0,如果是1或更大的数字,则会在图标上覆盖显示这个数字。
notification.number=notificationNumber;

Flag的使用

notification有1个flag属性,除了DEFAULT_SOUND之外,还有几个很有用的属性。
FLAG_AUTO_CANCEL:自动清除Notification,前面的例子中有用到
FLAG_INSISTENT:提示音一直不停,直至用户响应(很吵吧!)
FLAG_ONGOING_EVENT:表示这是1个正在进行的任务,不可以清除,第2个例子中有用到
FLAG_NO_CLEAR:不可以清除

分享到:
评论

相关推荐

    android消息通知栏Notification

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

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

    在Android系统中,Notification是一种重要的用户界面元素,用于在状态栏显示应用的提醒或消息。当用户无法直接与应用交互时,例如手机锁屏或在其他应用中,Notification可以帮助用户了解应用的状态并进行相应的操作...

    Android 之 Notification 通知消息

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

    Android 通知(notification)简单实用Demo,包含点击功能

    这个"Notification_Test"压缩包中的代码应该包含了以上步骤的实现,你可以下载并运行来深入理解Android通知的工作原理。通过实践,你将能够熟练地在自己的应用中集成通知功能,提供更好的用户体验。同时,还可以...

    Android 8.0通知栏(Notification)适配

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

    Android自定义通知栏Notification

    在Android开发中,自定义通知栏Notification是一种提升用户体验的重要手段。...这个项目不仅提供了基本的自定义通知功能,也可能包含了一些进阶技巧和优化措施,对深入理解Android通知系统非常有帮助。

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

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

    Android notification+Service实时更新

    在Android开发中,`Notification`、`Service`和`BroadcastReceiver`是三个核心组件,它们在许多场景下都有着重要的作用,特别是在实现应用后台运行、实时更新等任务时。本项目"Android notification+Service实时更新...

    Android应用源码之notification.zip

    - 在Android系统中,Notification通过NotificationManager服务进行管理,应用通过该服务发送和取消通知。 - 通知会出现在状态栏,当用户下拉时显示详细信息,点击可以启动对应的Activity或者执行预定义的动作。 2...

    013_android之消息提示 notification 介绍

    在Android系统中,Notification是一种非侵入性的用户界面元素,它会出现在状态栏中,通常包含一个图标、标题和简短的消息。用户可以随时查看这些通知,即使他们没有直接与应用交互。Notification对于推送消息、提醒...

    安卓Android源码——实现Notification的通知栏常驻.zip

    "安卓Android源码——实现Notification的通知栏常驻.zip"这个资源显然包含了关于如何使通知在通知栏中持续显示的代码示例。这里我们将深入探讨Android中创建和管理Notification的基本概念,以及如何实现通知栏常驻。...

    Android仿QQ消息通知栏新消息实时更新效果

    1. **理解Android通知系统** Android的通知系统是通过Notification类来构建和管理的。Notification对象包含了通知的所有信息,如标题、内容、图标以及附加动作。这些信息会被展示在系统的通知栏中。 2. **创建...

    实现Notification的通知栏常驻

    在Android系统中,Notification是应用与用户交互的重要方式之一,特别是在后台运行时,它能向用户提供关键信息。常驻Notification是指即使用户关闭了应用程序,Notification仍然保留在通知栏,持续提醒用户有未处理...

    Android中AlarmManager+Notification实现定时通知提醒功能

    AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒...

    详解Android中Notification通知提醒

    在本文中,我们将深入探讨如何在Android中创建和使用Notification,以及如何实现普通通知和自定义视图通知。 首先,创建一个Notification需要以下步骤: 1. 创建Notification.Builder对象:这是构建Notification的...

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

    本资源包针对Android通知栏的使用进行了全面整合,涵盖了各种应用场景和实现方式,是Android开发者深入理解与实践Notification功能的理想资料。 首先,我们来探讨Android通知的基本结构。一个通知通常包括以下组件...

    android Notification通知消息学习(NotificationManager)

    总之,“android Notification通知消息学习(NotificationManager)”这篇博客很可能是对Android通知机制的全面讲解,包括理论知识和实践技巧,对于希望提升Android应用用户体验的开发者来说是一份有价值的资源。...

    Android 之 通知Notification

    创建一个基本的Android通知通常需要以下步骤: 1. **创建通知渠道**:对于Android 8.0及更高版本,首先需要创建NotificationChannel对象,并通过NotificationManager的createNotificationChannel方法进行注册。 2....

    Android通知栏消息、点亮屏幕、震动、声音、显示样式

    创建一个Android通知,我们需要使用`NotificationCompat.Builder`类。首先,实例化一个Builder对象,设置通知的基本属性,如标题、内容、图标等。例如: ```java NotificationCompat.Builder builder = new ...

    Android的各种通知Notification、Dialog、Toast、Snackbar

    通知(Notification)、对话框(Dialog)、吐司(Toast)和Snackbar是Android系统提供的一些关键组件,用于向用户展示各种信息和提示。下面将详细介绍这些组件的功能、用法以及它们在不同场景下的适用性。 **1. ...

Global site tag (gtag.js) - Google Analytics