Android开发——Notification通知的使用及NotificationCopat.Builder常用设置API

想要看全部设置的请看这一篇 【转】NotificationCopat.Builder全部设置

常用设置:

 

设置属性

说明

setAutoCancel(boolean autocancel)

设置点击信息后自动清除通知

setContent(RemoteView view)

设置自定义通知

setContentTitle(String string)

设置标题

setContentText(String string)

设置内容

SetContentIntent(PendingIntent intent)

设置点击信息后的跳转(意图)

setWhen(long when)

设置时间

setPriority(int pri)

设置通知的重要程度

setStyle(Style style)

设置样式

setVisibility(int visibility)

设置锁屏显示

setDefault(int defaults)

设置默认

setLight(int argb, int onMs, int offMs)

设置呼吸灯闪烁效果

setSound(Uri sound)

设置通知音效

setVibrate(long [] pattern)

设置震动效果

setCategory(String category)

设置通知类别

setColor(int argb)

设置通知栏颜色

setFullScreenIntent(PendingIntent intent,boolean b)

设置弹窗显示

简单步骤说明:

创建一个notification,需要NotificationManager(这是一个系统的服务类,由名字很容易知道是用来管理Notification通知类的)和Notification(通知类)

Notification创建类似Dialog的创建,通过Notification类中提供的各种方法来设置属性,最后build方法生成

NotificationManger的实例可以通过getSystemService这个方法获得

PendingIntent与Intent有关系,这是一个延迟意图,可以通过调用getActivity,getBroadcastReceiver,getService三个方法获得实例

 

普通使用:


NotificationCompat.Builder自动设置的默认值:

    priority: PRIORITY_DEFAULT //通知的重要程度
    when: System.currentTimeMillis() //时间
    audio stream: STREAM_DEFAULT //音效 系统默认音效

上面的这三个我们一般情况下可以不用设置,系统会自动帮我们设置

下面就是一个简单的使用,设置了标题,内容,小图标,点击通知栏的该信息会跳转到main2Activity中,具体可以看注释,之后由这个普通使用的通知作为基础讲解NotificationCopat.Builder中的其他设置


Intent intent = new Intent(this,Main2Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationManager manger = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("this is cotenttitle")//设置标题,必要
.setContentText("contentText")//设置内容,必要
.setWhen(System.currentTimeMillis())//设置时间,默认设置,可以忽略
.setSmallIcon(R.mipmap.ic_launcher)//设置通知栏的小图标,必须设置
.setAutoCancel(true)//设置自动删除,点击通知栏信息之后系统会自动将状态栏的通知删除,要与setContentIntent连用
.setContentIntent(pendingIntent)//设置在通知栏中点击该信息之后的跳转,参数是一个pendingIntent
     
.build();
     manger.notify(1,notification);//id为1

setLargeIcon

Intent  intent = new Intent(this,Main2Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationManager manger = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("this is cotenttitle")//设置标题,必要
.setContentText("contentText")//设置内容,必要
.setWhen(System.currentTimeMillis())//设置时间,默认设置,可以忽略
.setSmallIcon(R.mipmap.ic_launcher)//设置通知栏的小图标,必须设置
.setAutoCancel(true)//设置自动删除,点击通知栏信息之后系统会自动将状态栏的通知删除
.setContentIntent(pendingIntent)//设置在通知栏中点击该信息之后的跳转,参数是一个pendingIntent
     .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
     //设置大图标,未设置时使用小图标代替,拉下通知栏显示的那个图标
     //设置大图片 BitmpFactory.decodeResource(Resource res,int id) 根据给定的资源Id解析成位图
     .build();
     manger.notify(1,notification);

setPriority实现弹窗信息


Intent  intent = new Intent(this,Main2Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationManager manger = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("this is cotenttitle")//设置标题,必要
.setContentText("contentText")//设置内容,必要
.setWhen(System.currentTimeMillis())//设置时间,默认设置,可以忽略
.setSmallIcon(R.mipmap.ic_launcher)//设置通知栏的小图标,必须设置
.setAutoCancel(true)//设置自动删除,点击通知栏信息之后系统会自动将状态栏的通知删除
.setContentIntent(pendingIntent)//设置在通知栏中点击该信息之后的跳转,参数是一个pendingIntent
     .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
     //设置大图标,未设置时使用小图标代替,拉下通知栏显示的那个图标
     //设置大图片 BitmpFactory.decodeResource(Resource res,int id) 根据给定的资源Id解析成位图
     .setPriority(NotificationCompat.PRIORITY_MAX) //设置为最高重要程度
     .setDefaults(NotificationCompat.DEFAULT_SOUND)//设置音效为默认
     .build();
     manger.notify(1,notification);
 

由于只有一条信息,我们可能看不出最高重要程度的区别,但是,我们如果再设置音效或者震动,那么这条通知就会弹窗显示

实现弹窗显示的两种方法:一,当重要程度为最高,且设置了音效或者是震动 ;二,调用setFullScreenIntent()

setFullScreenIntent


Intent  intent = new Intent(this,Main2Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationManager manger = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("this is cotenttitle")//设置标题,必要
.setContentText("contentText")//设置内容,必要
.setWhen(System.currentTimeMillis())//设置时间,默认设置,可以忽略
.setSmallIcon(R.mipmap.ic_launcher)//设置通知栏的小图标,必须设置
.setAutoCancel(true)//设置自动删除,点击通知栏信息之后系统会自动将状态栏的通知删除
.setContentIntent(pendingIntent)//设置在通知栏中点击该信息之后的跳转,参数是一个pendingIntent
     .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
     //设置大图标,未设置时使用小图标代替,拉下通知栏显示的那个图标
     //设置大图片 BitmpFactory.decodeResource(Resource res,int id) 根据给定的资源Id解析成位图
     .setFullScreenIntent(pendingIntent,false)
     .build();
     manger.notify(1,notification);
 

 图片与之前那张一样,我就不放出来了,值得说的是这个方法的第二个参数,为什么是false呢,如果是true的话,当你在玩游戏的时候,屏幕是全屏,然后这条通知就不需要点击,直接就会跳转到某个界面去,除非是来电了才会用true,其他情况若是使用的话,用户估计直接卸载APP

setDefault

之前也是使用了这个设置与setPriority连用实现了弹窗消息,简单解释,这个可以设置音效,震动和呼吸灯的默认效果,也可以单独设置某个的默认,之前我就是单独设置了音效的默认

有四个参数可以选择,由英文也可以看出是什么意思了吧,这里就不多解释了

setStyle

      这里我就简单地说两种,长文本显示和大图片显示,更多的请看这一篇Android开发——Notification通知的各种Style详解

  一、BigTextStyle   长文本显示

 
Intent  intent = new Intent(this,Main2Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationManager manger = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("this is cotenttitle")//设置标题,必要
.setContentText("contentText")//设置内容,必要
.setWhen(System.currentTimeMillis())//设置时间,默认设置,可以忽略
.setSmallIcon(R.mipmap.ic_launcher)//设置通知栏的小图标,必须设置
.setAutoCancel(true)//设置自动删除,点击通知栏信息之后系统会自动将状态栏的通知删除
.setContentIntent(pendingIntent)//设置在通知栏中点击该信息之后的跳转,参数是一个pendingIntent
     .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
     //设置大图标,未设置时使用小图标代替,拉下通知栏显示的那个图标
     //设置大图片 BitmpFactory.decodeResource(Resource res,int id) 根据给定的资源Id解析成位
     .setStyle(new NotificationCompat.BigTextStyle().bigText("长内容长内容长内容长内容长内容长内容长内容长内容长内容长内容长
内容长内容长内容长内容长内容长内容长内容长内容长内容长内容"))

     .build();
     manger.notify(1,notification);
 

   BigPictureStyle 大图片显示

Intent  intent = new Intent(this,Main2Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationManager manger = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("this is cotenttitle")//设置标题,必要
.setContentText("contentText")//设置内容,必要
.setWhen(System.currentTimeMillis())//设置时间,默认设置,可以忽略
.setSmallIcon(R.mipmap.ic_launcher)//设置通知栏的小图标,必须设置
.setAutoCancel(true)//设置自动删除,点击通知栏信息之后系统会自动将状态栏的通知删除
.setContentIntent(pendingIntent)//设置在通知栏中点击该信息之后的跳转,参数是一个pendingIntent
     .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
     //设置大图标,未设置时使用小图标代替,拉下通知栏显示的那个图标
     //设置大图片 BitmpFactory.decodeResource(Resource res,int id) 根据给定的资源Id解析成位
     .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.index)))
     .build();
     manger.notify(1,notification);

 

 

 setContent

  参数是一个RemoteView,由名字大概可以知道是一个View,定义一个布局文件,之后与其绑定,之后,为布局中的按钮设置onClick事件,之后调用setContent,remoteView作为参数传入

            RemoteViews remoteView = new RemoteViews(getPackageName(),R.layout.notification);
               remoteView.setOnClickPendingIntent(R.id.last_btn,pendingIntent);

 

个人觉得自定义布局可以做成像音乐播放器的通知栏那样,不过,今天就暂时简单的学习,之后有学到再补充

 

posted @ 2018-01-29 17:21  Stars-one  阅读(9071)  评论(3编辑  收藏  举报