Android 笔记 通知/notifications

通知 / notifications

官网–通知
通常应用会在通知栏显示一些通知,提示任务进度,提示信息,或者推送什么的。

Android有个组件叫Notification就是创建这样的通知。通知区域就是常见的任务栏,可以下拉显示详细内容,可以点击,也可以收起来忽略之。

创建

可以像一般的类一样创建通知
Notification notif = new Notification(int icon, CharSequence tickerText, long when);
但是这个已经被标记为deprecated了,推荐用Notification.Builder()来创建。

Notification noti = new Notification.Builder(mContext)
         .setContentTitle("New mail from " + sender.toString())
         .setContentText(subject)
         .setSmallIcon(R.drawable.new_mail)
         .setLargeIcon(aBitmap)
         .build();

下面的设置对应不同的内容。
要显示通知,需要创建一个NotificationManager,然后调用notify方法

NotificationManager notiManager = 
    (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notiManager.notify(mNotiId,notiBuilder.build());

其中mNotiId是一个int类型的标记
当您需要为同一类型的事件多次发出同一通知时,应避免创建全新的通知, 而是应考虑通过更改之前通知的某些值和/或为其添加某些值来更新通知。
当这个id没有更改,那么build出来的notification就还是原来那个,也就是说,新的设置是更新原来的notification。

这样,一个通知就创建了。

设置

1,点击以后通知消失
notiBuilder.setAutoCancel(true);
2,常驻的通知,像手机QQ一样,点击不消失,并且也不能按“清除”按钮清除掉。
notiBuilder.setOngoing(true);
还有更多类似的设置,可以查询Notification.Builder

除此以外,还可以直接设置notification的flag变量
notification.flag = Notification.FLAG_ONGOING_EVENT;
不过,我觉得用builder设置比较直观一点。

点击操作

简单的点击操作可以通过设置一个PendingIntent来实现

PendingIntent pendingIntent = PendingIntent.getActivity(
                        thisActivity,
                        0,
                        intentChooser,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );
notiBuilder.setContentIntent(pendingIntent);
notiManager.notify(mNotiId,notiBuilder.build());

其中第三个参数就是打开新的Activity的intent
假如是进行一个广播,则需要实用getBroadcast()方法

设置进度条

如果是一个显示进度的通知,需要显示进度条,Android 4.0以上可以直接调用
builder.setProgress(max, progress, false)来设置。这样会显示一个进度条,可以查看到完成百分比。

当然,最好是在新的线程里设置。
完成以后,记得设置setProgress(0,0,false),然后修改通知栏的信息以提示进度完成。

如果要进度条不显示半分比,而是一个正在进行的动画来表示正在工作,就设置
setProgress(0,0,true)。这样就并不会显示百分比。完成以后依然需要更新信息来提示完成。

例子

new Thread(
                        new Runnable() {
                            @Override
                            public void run() {
                                int progress;
                                for(progress =0;progress<=100;progress+=10)
                                {
                                    //如果要显示半分比 :
                                    notiBuilder.setProgress(100,progress,false);
                                    //如果要不显示半分比但是有一个明显的正在工作的动画 :
                                    //notiBuilder.setProgress(0,0,true);
                                    notiManager.notify(520,notiBuilder.build());
                                    try {
                                        Thread.sleep(1000);
                                    }catch (InterruptedException e) {
                                        Log.d("septemLog","sleep faild");
                                    }
                                }
                                notiBuilder.setContentText("Progress complete.")
                                           .setProgress(0,0,false);
                                notiManager.notify(520,notiBuilder.build());
                            }
                        }
                ).start();

添加ACTION

可以在通知的下面添加ACTION按钮,来完成一些事件。
builder.addAction(int,charSequence,pendingIntent)
三个参数分别为图标的resourceID,标题,执行动作的pendingIntent.

测试发现,普通style下最多可以添加到3个ACTION,更多的就显示不出来了,如果是mediaStyle,会显示5个。

通常添加按钮是为了做一个音频播放的通知,那么可以通过setStyle(new Notification.MediaStyle())来把通知栏变得比较像一个播放器。

浮动通知

通信类的APP需要显示浮动通知,就是在屏幕上显示一个信息内容,提供一些进一步的操作。
notiBuilder.setFullScreenIntent(pendingIntent,true);
第二个参数表明,这是一个高优先级的通知。可以根据情况设置。

注意

如果设置了autoCancele(true),点击通知内容的时候,通知会自动消失。
在模拟器测试中发现,如果设置了setAction()添加了按钮以后,点击按钮不会马上消失,会过一会儿自动消失。
所以,如果需要点击以后马上消失,需要设置一个这个按钮的动作是一个intent,这个intent通知当前ACTIVITY把这个消息清除掉。清除就是builder.cancel(mNotifId)。对应id的消息就会清除。

自定义View

如果需要自定义通知的view,就setContent(RemoteViews),传入一个RemoteViews对象,在这个对象中设置好自定义View.

具体怎么实用还没有研究过。

参考 - pending intent
参考 Android 通知栏Notification的整合全面学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值