Android Notification II-其他细节

Notification元数据:

Notification

setCategory()告知Android当设备出在在优先模式下(比如如果我们的Notification代表来电话,即时消息或者警告等重要信息)如何处理APPNotification.

setPriority()可以为Notification设置优先级,比如PRIORITY_MAX或者PRIORITY_HIGH,可以让Notification显示为一个悬浮窗,或者是否同时有响铃和振动.

addPerson()让我们可以为Notification增加一个用户列表. APP可以通过使用该方法来告知Android应该根据指定的用户为Notification分组,或者表示指定的用户具有更高的优先级.

 

Heads-upNotifications:

Android5.0,未锁屏的时候, Notification可以作为一个小的悬浮窗的形式出现(也叫heads-up notification).这种Notification上还可以放置按钮,用户可以无需离开当前的APP就可以直接操作heads-upNotification.这里是一个全屏APP上显示一个heads-up Notification:


可以使用heads-up Notification的场景包括:

用户的Activity是全屏的,或者Notification具有高优先级,并且用户使用铃声和振动.

锁屏时使用Notification:

Android5.0版本下, Notification现在可以显示在锁定的屏幕上了.我们的APP可以使用这一功能来提供媒体播放控制和其他常用的操作.用户可以通过设置来选择让Notification是否可以显示在锁定的屏幕上,我们则可以设计自己的Notification是否可以显示在锁定的屏幕上.

设置可见性:

我们的APP可以控制在锁定的屏幕上的显示级别,我们需要通过setVisibility()方法来指定下列某一参数来实现这个设定:

VISIBILITY_PUBLIC, 显示Notification的完整的内容.

VISIBILITY_SECRET, 在锁屏时不显示Notification的任何部分.

VISIBILITY_PRIVATE, 显示基本信息,比如Notification的图标和主题,但是隐藏Notification的完整内容.

当设置为VISIBILITY_PRIVATE的时候,我们也可以显示一些Notification的其它信息,而隐藏它的详细信息, 比如一个SMS APP可以在Notification显示你有三条新的短消息”,而隐藏消息内容和发件人. 为了提供这样的Notification,我们首先应该使用NotificationCompat.Builder创建替代的Notification(就是显示你有三条新的短消息那个Notification),当我们创建private Notification对象的时候, 使用setPublicVersion()方法关联替代Notificationprivate Notification.

在锁定的屏幕上控制媒体播放:

Android5.0版本下,不再使用RemoteControlClient在锁定的屏幕上显示媒体控制器,官方推荐使用Notification.MediaStyle模板,并通过addAction()方法来关联操作和可点击的图标.该模板和addAction()方法并不能在support library中支持,所以只能在Android5.0和更高的版本中使用.

想要在锁定的屏幕上显示媒体播放器, Notification的可见性必须被设置为VISIBILITY_PUBLIC,然后添加动作并设置Notification.MediaStyle模板.栗子:

Notification notification = new Notification.Builder(context)
    // Show controlson lock screen even when user hides sensitive content.
    .setVisibility(Notification.VISIBILITY_PUBLIC)
    .setSmallIcon(R.drawable.ic_stat_player)
    // Add mediacontrol buttons that invoke intents in your media service
    .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
    .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
    .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
    // Apply themedia style template
    .setStyle(new Notification.MediaStyle()
    .setShowActionsInCompactView(1 /* #1: pausebutton */)
    .setMediaSession(mMediaSession.getSessionToken())
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(albumArtBitmap)
    .build();


自定义NotificationLayout:

Notification framework允许我们定义自定义的Notificationlayout,它通过一个RemoteViews来定义一个Notification的外形.自定义layoutNotification和普通的Notification很相似,但是它们机遇RemoteViews定义的XML layout文件.

自定义的Notification可以设置自己的高度,普通的Notification的高度限制为64dp,但是自定义的可以达到256dp.

想要定义一个自定义的Notification layout,首先我们需要实例化一个RemoteViews对象,并加载一个layout文件.然后调用setContent()方法而不是setContentTitle()方法.如果要设置详细内容的话, 使用RemoteViews内部的方法来设置这些值:

1.      创建一个XML layout文件作为Notification的布局文件.可以起任意的名字, 但是必须使用.xml作为后缀名.

2.      APP中使用RemoveViews中的方法定义Notification的图标和文字.通过setContent()方法将RemoteViews对象传给NotificationCompat.Builder.避免设置RemoteViews对象的背景,这样我们的文字可能会变得不好读.

RemoteViews还包含其他方法,可以让我们方便的增加一个Chronometer或者ProgressBar到我们的Notificationlayout.想了解更多的关于创建自定义Notificationlayout的信息,可以参考RemoteViews.

另外需要注意的是, 当我们自定义Notification layout的时候,需要关注其在不同的屏幕方向和不同分辨率下的表现. 这一忠告适用于所有的View,特别是Notification, 因为Notification drawer所拥有的空间十分的有限,所以确保我们的自定义的Notification layout不要太复杂,同时要注意它在各种配置下的表现.

为自定义Notificationtext使用样式资源:

请保持对自定义的Notification text使用样式资源. Notification的背景会因为设备和版本不同而显示不同的颜色,为了使文字可以看清楚, 我们需要使用样式资源.Android2.3开始, AndroidNotification layout定义了标准的样式.如果我们在Android2.3及以上版本使用相同的样式可以确保我们的Notification的文字可以正常显示.

 

总结:

创建并显示一个Notification的流程:

Ø 创建一个NotificationCompat.Builder对象;

Ø 通过该对象设置icon, title, text.

Ø 通过该对象设置其它可选项.

Ø 创建stackBuilder, 添加堆栈信息.

Ø 通过stackBuilder创建PendingIntent.

Ø 通过Builder对象设置PendingIntent.

Ø 通过NotificationManager发布这条Notification.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值