`
ipjmc
  • 浏览: 708055 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 使用Notification

阅读更多
        用惯了Android的人在刚拿到iPhone的时候,总是会习惯性的用手指从状态栏往下拖一下,这都是给Notification闹的。
        不过Notification也确实是1个不错的提示工具,不干扰正常的操作,事后还可以再翻看详细的内容,点击后还可以进入相关的画面查看更具体的内容。
        今天我就以代码为主的形式来介绍Notification的使用,包括基本用法,自定义的View,以及更多的控制方法。

        我们先看下Notification的几个主要组成部分:
        Icon:不解释
        Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动





        Content Title:Notification展开后的标题
        Content Text:Notification展开后的内容





        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中的界面很接近呢?



        更好的控制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:不可以清除
  • 大小: 15.6 KB
  • 大小: 16.2 KB
  • 大小: 17.4 KB
分享到:
评论

相关推荐

    Android 使用Notification自定义通知栏显示

    Android 使用Notification自定义通知栏显示。自定义系统状态栏通知类NotificationExtend,也可以手动更新状态栏。依据此项目可以做成线程接受,或者广播接受自动更新。我博客网址: ...

    Android使用Notification在状态栏上显示通知

    Android 使用 Notification 在状态栏上显示通知 Android 手机系统中,Notification 是一个非常重要的组件,它允许开发者在状态栏上显示通知信息,以提醒用户一些重要的事情。下面详细介绍了 Android 使用 ...

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

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

    使用android push notification service 实现即时通知

    不过,我们可以讨论如何在Android上使用类似APNs的Push Notification Service来实现即时通知。 **Android Push Notification Service** 在Android上,Google提供了Firebase Cloud Messaging(FCM)作为GCM的升级版...

    Android notification+Service实时更新

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

    Android使用Notification实现宽视图通知栏(二)

    Notification是在你的应用常规界面之外展示的消息。当app让系统发送一个消息的时候,消息首先以图表的...Notification的界面元素在通知抽屉中的notification有两种显示方式,取决于你的android版本以及notification dr

    Android自定义Notification

    在Android开发中,Notification是一种非常重要的组件,它用于在状态栏上向用户显示信息,即使应用在后台运行或用户没有直接与应用交互时也能提供反馈。Android自定义Notification允许开发者根据自己的需求创建具有...

    Android 之 Notification 通知消息

    本文将深入探讨`Android 之 Notification 通知消息`的相关知识点,包括Notification的基本使用、设计原则、通知渠道以及自定义样式。 一、Notification基本使用 Notification主要由三个核心组件构成:Notification....

    android 8.0 notification 写法

    如果你的应用需要兼容更低版本的Android,可以使用`NotificationCompat`类提供的方法。 在`android-NotificationChannels-master`这个项目中,你可能会找到一个示例应用,它展示了如何创建和使用`...

    Android使用Notification实现普通通知栏(一)

    本篇文章将详细讲解如何在Android中使用Notification实现普通通知栏的功能。 首先,Notification在Android系统中扮演着向用户展示应用程序后台活动的角色。当应用发送一个Notification时,系统会在状态栏显示一个...

    android Notification使用大全

    在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使用户不在使用应用时也能提醒用户有新的事件发生。本文将深入探讨如何在Android中使用Notification,包括基本用法、自定义...

    Android-Notification-Example-master源码

    通过对`Android-Notification-Example-master`源码的学习,开发者可以更好地掌握如何在自己的应用中优雅地使用通知功能,提升用户体验。这个项目提供了一个良好的起点,帮助开发者理解和实践Android通知的各种特性和...

    Android Notification更新

    在Android系统中,Notification是应用与用户交互的重要方式之一,特别是在后台运行时,它能将信息传达给用户,如消息提醒、下载进度等。本文将深入探讨如何利用Android的Notification API来实现动态下载过程的可视化...

    Android push notification 服务端源代码

    Android Push Notification服务是Android应用程序与用户交互的一种重要方式,它允许应用在后台向用户发送消息,即使应用没有在运行。AndroidPN(Android Push Notification)是一个开源项目,专注于提供服务端的解决...

    android notification完全解析Demo

    在Android开发中,Notification是应用与用户交互的重要方式,它能够在状态栏中显示信息,即使用户不在应用程序中也能提醒用户有新的活动或消息。本文将深入解析Android Notification的工作原理、设计模式以及如何...

    Android使用Notification,通知无法显示的问题

    今天看着《第一行代码》,准备实现一下书中所说的notification通知功能。非常简单的代码如下所示 @Override public void onClick(View v) { switch(v.getId()){ case R.id.send_notice: NotificationManager ...

    Android Notification

    在Android系统中,通知(Notification)是用户界面中不可或缺的一部分,它允许应用在状态栏或者通知中心向用户传达重要信息,即使用户并未直接与应用交互。"Android Notification"这一主题聚焦于如何创建和管理用于...

    android Notification详解

    Notification 在 Android 系统中扮演着关键的角色,主要功能包括: 1. 提醒用户:当应用在后台运行或者没有在前台显示时,Notification 可以提供一种方式让用户知道应用的活动状态,例如邮件到达、消息通知、下载...

Global site tag (gtag.js) - Google Analytics