Android的Notification是android系统中很重要的一个机制,产品人员常常利用通知栏的方式,跟用户进行弱沟通。拥有推送通知的app要比没有此类功能的app活跃率要高很多。另外类似于墨迹天气,清理大师等app,也会将通知栏常驻,利用自定义的布局,方便用户及时快捷的查看所需的信息和使用快捷的功能。所以Notification的使用,也在开发当中,使用的越来越频繁。今天我就来跟大家分享一下Notification的常用事项。
我不了解大家平时怎么使用Notification,我常常看到有些人的代码是这样写的:
Notification notification=new Notification(notificationIcon, notificationTitle, when);
notification.defaults=Notification.DEFAULT_ALL;
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
notification.setLatestEventInfo(this,"测试展开title", "测试展开内容",pendingIntent);
。。。。。。。。。。。。。
具体的代码我就不贴全了,因为大家如果注意IDE的提示的话,就会发现,其实这是一种不推荐的用法,API的支持已经过时了。最新的Notification的用法,是推荐使用V4包下的NotificationCompat.Builder,利用它,进行各种设置,具体的用法先别着急,我们慢慢道来。
NotificationCompat.Builder notifyBuilder = new NotificationCompat.Builder(
this);
首先,我们需要先初始化一个notifyBuilder,然后利用它的各种set方法,进行相关设置,具体的设置,我们参考下图:
图示中的序号1,叫做Content title,通过这个方法来设置:
notifyBuilder.setContentTitle("This is My Notification");
图示中的序号3,叫做Content text,利用下面的方法来设置:
notifyBuilder.setContentText("Hello World");
图示中的需要5,叫做Small icon,利用下面的方法来设置:
notifyBuilder.setSmallIcon(R.drawable.small);
这三个参数的设定是必须的,每次调用Notification,必须得设定这三个参数。除去这三个以外,另外的2,4,6区域,分别是Large Icon,Content Info,Time,设置方法如下所示:
// 如果不设置LargeIcon,那么系统会默认将上面的SmallIcon显示在通知选项的最左侧,右下角的小图标将不再显示
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bigicon);
notifyBuilder.setLargeIcon(bitmap);
// 这里用来显示右下角的数字
notifyBuilder.setNumber(10);
notifyBuilder.setWhen(System.currentTimeMillis());
以上就是关于Notification的基本设置,下面,我们继续看看其它方面的设置,直接上代码:
// 将AutoCancel设为true后,当你点击通知栏的notification后,它会自动被取消消失
notifyBuilder.setAutoCancel(true);
// 将Ongoing设为true 那么notification将不能滑动删除
// notifyBuilder.setOngoing(true);
// 从Android4.1开始,可以通过以下方法,设置notification的优先级,优先级越高的,通知排的越靠前,优先级低的,不会在手机最顶部的状态栏显示图标
notifyBuilder.setPriority(NotificationCompat.PRIORITY_MAX);
// notifyBuilder.setPriority(NotificationCompat.PRIORITY_MIN);
notifyBuilder.setTicker("Hi,Notification is here");
// Uri uri =
// Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.cat);
// Uri uri = Uri.parse("file:///mnt/sdcard/cat.mp3");
// notifyBuilder.setSound(uri);
// Notification.DEFAULT_ALL:铃声、闪光、震动均系统默认。
// Notification.DEFAULT_SOUND:系统默认铃声。
// Notification.DEFAULT_VIBRATE:系统默认震动。
// Notification.DEFAULT_LIGHTS:系统默认闪光。
// notifyBuilder.setDefaults(Notification.DEFAULT_ALL);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFY_ID, notifyBuilder.build());
如上面的注释所示,如果你想点击完notification后,该通知自动消失,那么你就需要调用setAutoCancel(boolean b)这个方法,并且将其设为true,如果你想让你的通知栏常驻,用户无法滑动删除,也不能通过手机的清除键 删除,类似于墨迹天气等app的通知栏,那么你可以设置setOngoing方法,也设为true,这样,通知栏只能通过代码调用cancel方法才能消失,很霸道地,有木有!另外,从Android4.1时代开始,系统允许设置Notification的优先级,对于优先级高的通知,会排在 通知栏的前面,并在会在手机最上端的Status Bar显示一个图标,如果优先级设定的较低,那么就会被系统显示在通知栏的后面,并且Status Bar不再显示相应的图标,设置优先级的方法,就是调用setPriority(int p)。另外,当启动通知栏的时候,我们常常可以在手机最上端的Status Bar上面,会闪现一段提示语,用来提醒用户,这段提示语具体显示的文字,就是靠setTicker() 这个方法来实现的。除此之外,我们还可以设置,推送通知时的铃声、震动效果,闪光灯效果等等,具体的我就不一一列举了,参考上面的示例代码即可,需要注意一点的是,设置通知的铃声,除去调用系统自带的外,还有两种方式,分别是调用SD卡中的声音文件和项目工程自带的声音文件,这两种方式都需要用到Uri的地址,具体如何获取这两种的Uri,我已经在上面的代码中,写的很详细了,大家可以参考上面的代码,在自己的项目中实验一下。
说了这么多,还有最重要的一点没有讲,那就是在你设置完notification的各种属性后,你需要启动这个notification,否则就前功尽弃了,启动的方法,如上面的示例代码所示,你需要先获取一个NotificationManager的实例,然后调用notify的方法,notifyBuilder.build()这个方法,可以实例化一个notification的实例,另外,你还需要为这个notification分配一个独一无二的的id号,将来notification的更新和删除,都是依靠这个id号来做索引对应的。