Notification 详解

一. Notification的介绍

    普通视图:

    084817_njc5_1402227.png

  1. Content title 标题

  2. Large icon 大图标 (如果不设置,这小图标会自动应用到大图标上)

  3. Content text 内容

  4. Content info 显示有多少条信息

  5. Small icon 小图标

  6. Time 时间 可以调用 setWhen() 设置,如果为默认的话,则是系统默认时间(一般不用设置就是系统默认时间)


   视图:

    090104_crrM_1402227.png

大视图只比普通视图多了一个7

注意:在设置Notification 时 1 ,3 ,5 这三个属性是不可省略的


    确定进度的进度条通知:

            100924_9STx_1402227.png

    不确定进度的进度条通知:

            100952_ToL6_1402227.png

    自定义视图的通知:

            101350_uCg8_1402227.png


二 . 创建普通视图的Notification   

    创建一个Notification 首先需要用到两个包:Notification 或V4包中的 NotificationCompat 和 NotificationManager(消息管理器)

    1.新建一个Notification对象

        以前的方法是直接 new Notification();  现在一般用 Notification 中的一个内部静态类 Notification.Builder

            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);  这里用的是 v4 中的类,有助于程序向下兼容

    2.设置Notification的属性

        builder.setContentTitle("新的短消息")    //设置通知标题

        .setContentText("晚上的课你还上不上?")    //设置内容

        .setSmallIcon(R.drawable.ofm_feedback_icon)    //设置小图标,如果不设置大图标那么,小图标就会变成大图标

        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))    //设置大图标

        .setNumber(5)    //通知的数据 ,即上图中的第5项

        .setSound(Uri.parse("/storage/sdcard0/ttpod/song/bb.mp3"))    //设置声音

        .setVibrate(new long[]{0,400,200,500})    //设置震动,{不震动的时间,震动持续时间,不震动的时间,震动持续时间。。。}

        .setTicker("你有新的短消息")    //如图092648_kuAj_1402227.png通知发送后会先在 这个位置弹出Ticker和小图标

        .setDefaults(Notification.DEFAULT_ALL)            //设置默认的声音,闪光灯,震动 , 就是用系统默认的设置

        .setOngoing(true);        //设置是否为常驻通知,如果是则用户手动是无法清除的,必须由程序清除,比如关闭程序时自动清除

        .setAutoCancel(true);    //设置为自动清除,如果设置了单击通知事件的话;即单击通知后,通知会自动清除,前提是设置了通知的点击事件

    3.为通知设置点击后的事件

        这里要用到一个类:PendingIntent 它其中封装的是一个延迟的Intent 

        首先创建一个 Intent 对象 :Intent intent = new Intent(this,MainActivity2.class);

        然后获取一个PendingIntent 对象并将Intent传入 :   

                PendingIntent pi = PendingIntent.getActivity(this,3,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

                //这里getActivity表示获取的是一个可以开启一个Activity的 PendingIntent ,还可以getBroadcast,getService

        builder.setContentIntent(pi);  将PendingIntent设置进去

    4.获取通知管理器NotificationManager

        通知管理器是系统提供的,因此无论在何时何地获取的NotificationManager对象都是同一个对象

        获取NotificationManager :

        NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

        NotificationManager的主要方法:

                        notify(int id,Notification n)  发送一个通知,并为其添加一个id

                        cancel(String tag,int id)     清除一个通知,通过id,tag 是一个标记可以不用写

                        cancelAll();    清除所有的通知

        Notification n = builder.build(); 通过builder 获取Notification对象

        notificationManager.notify(5,n) 发送通知


 三.创建大视图的Notification

        如果要设置大视图的Notification 只需将以下代码加入上诉步奏即可

        注意:大视图 只有在Android 4.1 版本以后才支持(4.1也不支持)

         //设置宽视图内容

        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 获取大视图风格

                        String[] events = {"string","string","string"}; 大视图的内容

                for (int i=0;i<events.length;i++){

                    inboxStyle.addLine(events[i]);        将内容分行添加

                        }

                    builder.setStyle(inboxStyle); 设置风格


四.创建确定进度的进度条的Notification

                    进度条通知就是不断的发送Id相同的通知,不断的更新这个通知,如果id相同的话会覆盖上一个通知

                    其他步奏和普通视图是一样的只要 添加一个 set.Progress(int i, int j , boolean b);

                        i 表示总进度,j表示当前进度,b 表示是否为不确定的进度条模式

                    下图是模拟下载进度条通知:

                        102418_xrea_1402227.png

                        

        


五.创建不确定进度的进度条通知

        其他步奏和普通视图一样,只需添加这个属性即可

        builder.setProgress(0,0,true);

                                                                                


六.创建自定义视图的通知

        自定义视图需要用到一个远程视图类:RemoteViews

          首先创建一个布局文件,作为通知的布局,注意高度不能超过256dp

          然后创建RemoteViews 并将 自己的布局传入

          再用builder.setContent(RemoteViews r); 将RemoteViews 设置进去

          在自定义视图中 setContentTitle() 和 setContentText() 都不起作用

        103639_QCxs_1402227.png



 








转载于:https://my.oschina.net/u/1402227/blog/403283

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值