Notification 详解

一. Notification的介绍布局

    普通视图:
ui

    

  1. Content title 标题this

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

  3. Content text 内容code

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

  5. Small icon 小图标事件

  6. Time 时间 能够调用 setWhen() 设置,若是为默认的话,则是系统默认时间(通常不用设置就是系统默认时间)get


   视图:string

    

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

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


    肯定进度的进度条通知:

            

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

            

    自定义视图的通知:

            


二 . 建立普通视图的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("你有新的短消息")    //如图通知发送后会先在 这个位置弹出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 表示是否为不肯定的进度条模式

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

                        

                        

        


五.建立不肯定进度的进度条通知

        其余步奏和普通视图同样,只需添加这个属性便可

        builder.setProgress(0,0,true);

                                                                                


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

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

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

          而后建立RemoteViews 并将 本身的布局传入

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

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

        



 







相关文章
相关标签/搜索