Notification 初学笔记

Notification 
    一: Notification的简介
  首先先明确两个类NotificationManager :是状态栏通知的管理类,负责发通知、清楚通知等。
            Notification 是显示在手机状态栏的通知,手机状态栏位于手机屏幕的那里一般 显示了手机当前的网络状态,电池状态,时间等。                                                           
  Notification所代表的是一种具有全局效果的通知,程序一般通过NotificationManager
  服务来发送Notification.Android3.0增加Notification.Builder类,通过该类允许开发者更轻松地创建Notification对象。
       
二:Notification使用的步骤:
a)获取NotificationManager对象
    //因为NotificationManager是一个系统Service,必须通过getSystemService()来获取
    notificationmanger =(NotificationManager) getSystemService( NOTIFICATION_SERVICE );

b)创建Notification对象,有如下步骤: 

   1)获取Notification.Builder对象:

    Notification.Builder builder=new Notification.Builder(this);

   2)调用Notification.Builder的setxxx方法去设置相应的属性

      必须设置的三个属性 :setSmallIcon, setCotentText(), setCotentTitle.

     实例代码如下:

     builder.setSmallIcon(R.drawable.qq01);

      builder.setContentTitle("设置相应的标题");

      builder.setContentText("设置文章的相应显示的主要内容");

      3)调用Notification.Builder的build方法创建Notification对象(Android API 16之后)

      Notification notification= builder.build();


c)通过NotificationManager发送Notification
       //nm.notify(index,Notification);
    notificationmanger .notify(1, notification );
注意:取消通知nm.cancel(index)  这样Notification的大致步骤就写出来了
     
三 :当我们使用了这个Notification的时候会用到PendingIntent 延迟意图(另配 PendingIntent讲解)
    步骤如下 :
   a)创建一个意图对象: PendingIntent pit = PendingIntent.getActivity
                                            ( this , 1, new Intent( this ,SecondActivity. class ), PendingIntent. FLAG_UPDATE_CURRENT );
    b)将意图传入
            builder .setContentIntent( pendingIntent );

四: 在Notification中还将用到一个知识点
     BitmapFactory 工厂类  示例代码如下
     
         Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable. qq01 );
         builder .setContentInfo( "要闻" );
         builder .setWhen(System.currentTimeMillis());
         builder .setLargeIcon( bitmap );
       
实现效果如下




五:其他的使用属性

 builder.setTicker(“这是一条新闻通知");  设置通知在状态栏里面的标题

 setLargeIcon():为通知设置大图标,使用BitmapFactory创建图片。

 Bitmap btm=BitmapFactory.decodeResource(getResources(),R.drawable.msg);

 setWhen(System.currentTimeMillis())设置时间

 setContentIntent():设置点击通知后将要启动的程序组件对应的PendingIntent。

 setAutoCancel():设置点击通知后,状态自动删除通知

 setContentInfo()设置通知信息

 2)设置提示响应方法:

  setDefaults():设置通知为默认音效、振动、闪屏.

     Notification.DEFAULT_SOUND:使用默认声音

     Notification.DEFAULT_VIBRATE:设置默认振动

     Notification.DEFAULT_LIGHTS:设置使用默认闪光灯

     Notification.DEFAULT_ALL:设置使用默认声音,振动,闪光灯

  setSound(Uri.parse("file:///sdcard/apple.mp3")):设置自定义声音

  setVibrate(new long[]{1000,5000,1000,3000}):设置自定义振动.时长的单位是毫秒.

  数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长..]   

  setLights(int argb, int onMs, int offMs):设定前置LED灯的闪烁速率,持续毫秒数,停顿毫秒数

     注意:需要添加闪光灯和振动器的权限

      android.permission.FALSHLIGHT

      android.permission.VIBRATE

  3)进度条样式的通知:

  setProgress(int max,int progress,boolean indeterminate)方法用于设置进度条,

   max用于设定进度的最大数,

   progress用于设定当前的进度,=

   indeterminate用于是否是一个确定进度值的进度条。

   通过indeterminate的设置,可以实现两种不同样式的进度条,一种是有进度的(false),一种是循环流动的(true)。

 

  3)Notification视觉风格:

     Notification有两种视觉风格,

     一种是标准视图(Normal view)、一种是大视图(Big view)。标准视图在Android中各版本是通用的,但是对于大视图而言,

     仅支持Android4.1+的版本。

   从官方文档了解到,一个标准视图显示的大小要保持在64dp高,

   宽度为屏幕标准。标准视图的通知主体内容有一下几个p1.png;

   a)通知标题。

   b)大图标。

   c)通知内容。

   d)通知消息。

   e)小图标。

   f)通知的时间,一般为系统时间,也可以使用setWhen()设置.

 

  而对于大视图(Big View)而言,它的细节区域只能显示256dp高度的内容,并且只对Android4.1+之后的设备才支持,使用NotificationCompat.Builder来创建通知和设置通知的属性。

  

它比标准视图不一样的地方,

  均需要使用setStyle()方法设定,它大致的效果如p2.png:

  setStyle()传递一个NotificationCompat.Style对象,它是一个抽象类,Android为我们提供了三个实现类,用于显示不同的场景。分别是:

   NotificationCompat.BigPictureStyle, 在细节部分显示一个256dp高度的位图。

   NotificationCompat.BigTextStyle,在细节部分显示一个大的文本块。

   NotificationCompat.InboxStyle,在细节部分显示一段行文本。

   如果仅仅显示一个图片,使用BigPictureStyle是最方便的;

    如果需要显示一个富文本信息,则可以使用BigTextStyle;

    如果仅仅用于显示一个文本的信息,那么使用InboxStyle即可。

    

后面会以一个示例来展示InboxStyle的使用,

       该内部类中的方法addLine()添加一行

                                    setBigContentTitle:设置标题

    setSummaryText:设置落名

 

4)自定义通知:

setContent(RemoteViews view)可以自定义view.

  但是对于通知而言,因为它的全局性,并不能简单的通过inflate获取出一个View,因为可能触发通知的时候,

    响应的App已经关闭,无法获取当指定的XML布局文件。所以需要使用单独的一个RemoteViews类来操作。

  RemoteViews,描述了一个视图层次的结构,可以显示在另一个进程。层次结构也是从布局文件中“获取”出一个视图,

  这个类,提供了一些基本的操作求改其布局的内容。

  RemoteViews提供了多个构造函数,一般使用RemoteViews(String packageName,int layoutId)。

  第一个参数为包的名称,第二个为layout资源的Id。

  当获取到RemoteViews对象之后,可以使用它的一系列setXxx()方法通过控件的Id设置控件的属性。

 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值