Android中Notification 通知的使用

转自:http://blog.csdn.net/JourneyX/article/details/52981962?locationNum=8&fps=1

1.1    Notification 通知

1.1.1  简介

分类:

1.      最普通的通知

2.      带进度条的通知

3.      多行文本通知

4.      大图片通知

5.      自定义显示内容的通知

使用方式:

1.      创建通知对象

2.      设置通知对象的各种信息

3.      发送通知

 

创建通知对象的方式:

NotificationCompat.Builder nb = new NotificationCompat.Builder(this);

 

设置通知对象的各种信息的方式:

 

         //注意:以下6点信息的设置,必须要写小图标,其余的可选择性省略

            nb.setContentTitle("设置标题"+System.currentTimeMillis());

            //设置大图标

            nb.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher));

            nb.setContentText("内容文本部分 ");

            //设置info信息,即设置显示在时间右下角的文字

            nb.setContentInfo("info信息");

            //设置小图标

            nb.setSmallIcon(R.drawable.pic5);

            //设置通知时间

            nb.setWhen(System.currentTimeMillis());

           

            nb.setTicker("滚动提示文字");

            //永远不能手动移除

         nb.setOngoing(true);

 

发送通知的方式:

 

a.      获取用于发送通知的NotifycationManager对象

/*

       * Android中获取**Manager的方式:

       * 调用getSystemService方法进行获取

       * 在参数指定对应的Service静态常量即可

       * 如要获取NotificationManager那么就指定Service.NOTIFICATION_SERVICE

       * */

      manager = (NotificationManager)getSystemService(Service.NOTIFICATION_SERVICE);

b.      通过NotifycationManager对象对象调用notify方法发送

/*

             * 1. 可以选择使用String类型或者int类型

             * 作用:用来设置当前发送的通知的唯一标识

             *

             * 此唯一标识的作用:

             * 当多次按钮时,多次发送,如果id相同,那么最终在通知栏中只会有一条通知

             * 如果id不相同,那么发送多少次,通知栏中就会有几条通知

             * 2.要发送的通知对象

             * */

            num++; 

            manager.notify(numnb.build());

 

1.1.2  NotificationManager 通知管理器

概念:用于管理和发布消息通知

NotificationManager nm =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

nm.notify(int, Notification):发布通知

         参数1:id,通知的编号,用于区分不同的通知对象

         参数2:notification,通知对象

1.1.3  通知的分类

1、普通通知

         创建Builder对象

                   Notification.Builderbuilder = new Notification.Builder(Context):创建Builder对象(API11)

                   NotificationCompat.Builder builder = newNotificationCompat.Builder(Context):创建Builder对象(向下兼容)

         builder.setContentTitle(CharSequence): 标题

         builder.setContentText(CharSequence):通知内容

         builder.setSmallIcon(int):小图标

         builder.setLargeIcon(Bitmap):大图标

         builder.setWhen():时间,如果不设置,则默认显示当前的系统时间

         builder.setOngoing(boolean):设置是否不能消除该通知

         builder.setContentIntent(PendingIntent):设置PendingIntent对象

         Notificationnotification = builder.build():创建Notification对象

2、大图片通知

         BigPictureStylebigPictureStyle = new BigPictureStyle(builder);

         bigPictureStyle.bigPicture(Bitmap);

3、多行文字通知

         InboxStyleinboxStyle = new InboxStyle(builder);

         inboxStyle.setBigContentTitle(CharSequence):多行文字的标题

         inboxStyle.addLine(CharSequence):多行文字的内容

4、进度通知

         setProgress(intmax, int progress, boolean indeterminate):设置进度

         PS:每次设置进度后都需要重新发布更新显示

5、自定义通知

         RemoteViews views =new RemoteViews(String packageName, int layoutId);

                   参数1:packageName,包名

                   参数2:layoutId,布局文件的资源id

         builder.setContent(RemoteViews);

 

1.1.4  Notifycation 小图标的处理补充:

nb.setSmallIcon(icon,level)  实现效果:可以根据指定的参数二level的不同,选择显示不同的小图标

在res—drawable文件夹中创建以下xml文件,名为icon_level.xml

 

<level-list xmlns:android="http://schemas.android.com/apk/res/android">

   

    <!--

    通过level-list指定图标的显示级别问题

    drawable属性用于指定要显示文字

    maxLevel用于用于指定最大的显示几倍

    稍后通过NotificationCompat.Builder对象调用setSmallIcon(R.drawable.icon_level,2)

    方法设置要显示的小图标时,通过参数二指定的level级别到此文件中依次判断符合条件的maxLevel,找到符合的后,显示

    对应的drawable图片

    注:

    1. maxLevel为最大几倍,即如果指定的level3,那么按照当前写法,符合maxLevel4的条件

    显示对应的pic1图片

    2. maxLevel值越大的item代码越往后写,否则,满足条件后后面的item不再判断

   

     -->

    

    <item android:drawable="@drawable/pic0"android:maxLevel="2"></item>

    <item android:drawable="@drawable/pic1"android:maxLevel="4"></item>

    <item android:drawable="@drawable/pic2"android:maxLevel="6"></item>

</level-list>

 

在代码中:nb.setSmallIcon(R.drawable.icon_level, 3);

 

注:如果不记得icon_level.xml文件中具体要添加什么样的标签和属性,可以选择打开api帮助文件,搜索LevelListDrawable类,在该类的文档中有直接的例子

 

 

1.1.5  通知示例详解

public class MainActivity extends Activity {

 

         NotificationManagermanager//通知管理器,用于发送通知Notification对象

         private intnum;

         @Override

         protected voidonCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                   /*

                    * Android中获取**Manager的方式:

                    * 调用getSystemService方法进行获取

                    * 在参数指定对应的Service静态常量即可

                    * 如要获取NotificationManager那么就指定Service.NOTIFICATION_SERVICE

                    * */

                   manager =(NotificationManager)getSystemService(Service.NOTIFICATION_SERVICE);

         }

 

         public voidclick_Notification(View v){

                   switch (v.getId()) {

                   case R.id.btn_no_common://发送一个普通通知

                            Log.i("===""====测试日志信息");

                            btn_no_common();

                            break;

                   case R.id.btn_no_remove:

                            //移除通知

                            manager.cancel(num);

                            break;

                   case R.id.btn_no_bigicon:

                            //设置大图通知

                            btn_no_bigicon();

                            break;

                   case R.id.btn_no_progress:

                            //发送带进度条的通知

                            btn_no_progress();

                            break;

                   case R.id.btn_no_multi:

                            //封装多行文本样式

                            btn_no_multi();

                            break;

                   case R.id.btn_no_custom:

                            //完全自定义的通知

                            btn_no_custom();

                            break;

                   }

         }

 

1.1.5.1 普通通知

         private voidbtn_no_common(){

                   //1、创建通知对象

                   NotificationCompat.Buildernb = new NotificationCompat.Builder(this);

                   //2、设置通知对象的各种信息

                   //注意:以下6点信息的设置,必须要写小图标,其余的可选择性省略

                   nb.setContentTitle("设置标题"+System.currentTimeMillis());

                   //设置大图标

                   nb.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher));

                   nb.setContentText("内容文本部分");

                   //设置info信息,即设置显示在时间右下角的文字

                   nb.setContentInfo("info信息");

                   //必须要设置的小图标

                   nb.setSmallIcon(R.drawable.th_28adb914);

                   //设置通知时间

                   nb.setWhen(System.currentTimeMillis());

                  

                   //设置声音和振动

                   nb.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE);

                  

                   nb.setTicker("设置滚动提示的文字");

                   //不能手动移除,模态,需要代码控制

                   //nb.setOngoing(true);

                   num++;

                   manager.notify(num,nb.build());   //发送通知

         }

 

1.1.5.2 移除通知

manager.cancel(num);

 

1.1.5.3 设置大图通知

         private voidbtn_no_bigicon(){

                  BigPictureStylestyle = newBigPictureStyle();

                   style.bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.th_28adb914));

                   NotificationCompat.Builder nb_big = newNotificationCompat.Builder(this);

                   nb_big.setStyle(style);

                   nb_big.setSmallIcon(R.drawable.ic_launcher);

                   nb_big.setContentTitle("大图片通知");

                   nb_big.setTicker("大图通知来了");

                  

                   manager.notify(7, nb_big.build());

         }

 

1.1.5.4 进度条的通知

         private voidbtn_no_progress(){

                   final NotificationCompat.Builder nb2=new NotificationCompat.Builder(this)

                   .setSmallIcon(R.drawable.ic_launcher)

                   .setContentTitle("带进度条的通知")

                   /**

                    * 向进度中添加进度条

                    * 1.最大值

                    * 2.当前值

                    * 3、进度条是否模糊显示

                    */

                  .setProgress(100, 0, false);

                   manager.notify(3, nb2.build());

                  

                   new Thread(newRunnable() {

                           

                            @Override

                            public voidrun() {

                                     // TODO Auto-generated method stub

                                     for(inti=0;i<=100;i++){

                                               nb2.setProgress(100,i, false);

                                               manager.notify(3, nb2.build());

                                               SystemClock.sleep(500);

                                     }

                            }

                   }).start();

         }

1.1.5.5 多行文本样式

         private voidbtn_no_multi(){

                  InboxStyle style = new InboxStyle();

                   for(inti=0;i<10;i++){

                            style.addLine("这是第"+i+""+"文本");

                   }

                   style.setBigContentTitle("多行文本标题标题");

                  

                   NotificationCompat.Buildernb3 = new NotificationCompat.Builder(this)

                   .setSmallIcon(R.drawable.ic_launcher)

                   .setContentTitle("多行文本")

                   .setStyle(style)

                   //设置声音和振动

                   .setDefaults(Notification.DEFAULT_VIBRATE);;

                  

                   manager.notify(4, nb3.build());

         }

 

1.1.5.6 完全自定义的通知

private void btn_no_custom() {

                   RemoteViews views = new RemoteViews(getPackageName(),R.layout.remote);

                   NotificationCompat.Buildernb4 = newNotificationCompat.Builder(this)

                   .setSmallIcon(R.drawable.ic_launcher)

                  .setContent(views);

                   views.setImageViewResource(R.id.iv_re, R.drawable.th_28adb914);

                   views.setTextViewText(R.id.tv_re"文字文字");

                   /**

                    * 2.请求码

                    * 3、意图Intent要执行的跳转动作

                    * 4int标识,用于设置PendingIntent对象创建的特点

                    * 5bundle对象,是否携带数据,可不写

                    */

                   PendingIntentpendingIntent = PendingIntent.getActivity(this,

                                     1,

                                     new Intent(MainActivity.this, TwoActivity.class),

                                     PendingIntent.FLAG_UPDATE_CURRENT);

                   //设置RemoveView的点击事件

                   //当前设置代表点击idR.id.but_re的按钮时,要执行跳转到TwoActivity页面的操作

                   views.setOnClickPendingIntent(R.id.but_re, pendingIntent);

                  

                   manager.notify(5, nb4.build());

         }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值