Android中通知栏的使用

10 篇文章 0 订阅
1 篇文章 0 订阅
 Hi,众猿们,今天讲讲安卓中通知的使用:
 什么是通知:安卓系统用户发送消息的一种方式,当通知发出后,会出现在系统的通知栏上,当用户点击通知时,会进入到相应的界面(想象下当有新短信到来时的情况),一个默认的通知包含的内容为:

          ![通知包含的内容](https://img-blog.csdn.net/20160420212314894)
 通知的基本使用方式:其代码如下(一般定义在上下文对象(如Activity)中):
 //获得通知管理器,通知是一项系统服务
 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 //初始化通知对象 p1:通知的图标 p2:通知的状态栏显示的提示 p3:通知显示的时间
 Notification notification = new Notification(R.drawable.ic_launcher, "提醒", System.currentTimeMillis());
 //点击通知后的Intent,此例子点击后还是在当前界面
 Intent descIntent = new Intent(this, MainActivity.class);
 PendingIntent intent = PendingIntent.getActivity(this, 0, descIntent, 0);
 //设置通知信息
 notification.setLatestEventInfo(this, "提醒", "祝您天天快乐", intent);
 notification.flags|=Notification.FLAG_AUTO_CANCEL; //当查看后,自动消失
 notification.defaults |= Notification.DEFAULT_SOUND;//默认声音提示
 //发送通知,
 manager.notify(0, notification);
 从上面这段代码中我们可以看出通知编程中主要涉及到两个象:Notification和NotificationManager,下面咱们来一一接介绍对象:
 Notification:通知对象,我们希望展示一个什么样的通知,都要通过该对象来实现
    1.创建一个通知对象:调用其构造方法即可,其参数列表为:
         int icon :通知的图标资源的id号
         CharSequence tickerText:通知发出且用户还未下拉通知栏时通知在通知栏上展示的信息
         long when :通知的发出时间
    2.setLatestEventInfo方法:设置通知携带的信息,其参数列表为:
         Context context :创建通知的对象,可以是Activity、Service等
         CharSequence contentTitle:用户下拉通知后显示的标题
         CharSequence contentText:用户下拉通知后显示的内容
         PendingIntent contentIntent:用户点击通知后要完成的动作(如启动Activity等),该动作会延时完成,且不是通知的创建者(同时也是PendingIntent对象的创建者)来完成,因此要使用PendingIntent对象而不用Intent对象
    3.sound字段:Uri类型的对象,设置通知发出时的声音
    4.vibrate字段:int类型的数组,设置通知发出时的震动策略,如当该值为:{0,100,200,300}时,即可表示: 0毫秒后开始振动,振动100毫秒后停止,再过200毫秒后再次振动300毫秒
    5.设置通知发出时指示灯的闪亮情况,需使用以下字段:
        ledARGB :十六进制int型值,表示指示灯的颜色,如:0xff00ff00;
        ledOnMS :一个周期内指示灯亮的时间
        ledOffMS:一个周期内指示灯灭的时间
    我们可以看到,设置通知发出时的提示声音、震动情况和指示灯闪烁都是通过对Notification对象中字段进行赋值来完成的,我们甚至可以通过对Notification中的字段进行赋值来设置通知的界面(自定义通知的界面将在下面讲),设置点击通知后的动作等,具体应该对哪些字段赋值,众猿们可以自行查阅,本猿猿就不细说了,接下来再说说几个字段:
    6.flags:int型值,设置通知的其它属性,其值可以是Notification对象中的如下静态常量:
        FLAG_AUTO_CANCEL:在通知栏上点击此通知后自动清除此通知
        FLAG_INSISTENT:重复发出声音,直到用户响应此通知
        FLAG_ONLY_ALERT_ONCE:发起通知后,铃声和震动均只执行一次
        FLAG_ONGOING_EVENT:将此通知放到通知栏的"Ongoing"即"正在运行"组中,他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
        FLAG_NO_CLEAR:表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用
        FLAG_SHOW_LIGHTS:设置通知发出时会使用指示灯,我们要设置通知发出时指示灯的闪亮情况时必须对flags设置该值,
      当我们需要对flags设置多个值时,每个值之间要用|隔开
    7.defaults:设置通知的那些属性将采用默认值,这时我们对这些属性的其它设置将失效,其值可以是Notification对象中的如下静态常量:
          DEFAULT_SOUND:设置通知使用默认的提示音
          DEFAULT_VIBRATE:设置通知使用默认的震动方式
          DEFAULT_LIGHTS:设置通知使用默认的指示灯效果
          DEFAULT_ALL:设置通知全部使用默认效果
      此外,Notification对象中还有一个property字段,用于设置通知的优先级,没什么鸟用,大家了解就行
  NotificationManager:通知的管理对象,负责发送通知
    1.获取NotificationManager对象:调用Context对象的getSerivce方法,需传入Context对象的静态常量:NOTIFICATION_SERVICE作为参数
    2.notify方法:发送一个通知,其参数为:
         int id:为被发送的通知指定一个id
         Notification notification:需要被发送的通知对象
 其实呢,android系统还为我们提供另外一种创建Notification对象的方法,即:使用NotificationCompat中的Builder对象,知道观察者设计模式的猿猿们一看这个肯定就懂,本猿猿就不多说了,

自定义通知的布局:通知被发送时,其在通知栏上都会有一个默认的布局,但有时这个默认的布局并不能满足我们的要求,这是我们就要为通知自定义布局了:
  了解RemoteViews对象:该对象代表一个其它进程中的视图对象,我们都知道View是当前线程中的视图对象,而当我们需要为其它进程(如:通知是运行在系统进程中的,并不在当前进程中,因此其布局视图也不属于当前进程,再如桌面上的悬浮窗,其布局视图也不属于当前进程)中的对象创建视图时,就用用到RemoteViews对象,说到这儿大家就都能明白通知的布局视图是一个RemoteViews吧,因为我们要先了解一下该对象:
     1.将布局文件映射为RemoteViews对象:调用RemoteViews对象的构造函数即可,即参数列表为:
           String packageName:当前进程的包名,调用Context对象的getPackageName()方法即可获得
           int layoutId : 需映射的布局文件的资源id号
     2.RemoteViews对象属于其它进程,因此其仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件,其布局文件中也不能出现其它控件
     3.为RemoteViews对象的布局文件中的控件设置文字、背景图片等属性:可以直接在布局文件中为控件指定属性,当需要我们在代码中设置时要调用RemoteViews中的如下方法:
          setImageViewResource :为布局文件中的ImageView控件设置图片资源
          setTextViewText:为布局文件中的TextView控件设置文字
      RemoteViews对象中还有很多类似的方法,它们都用来为布局文件中的控件设置属性的,且它们的参数基本上相同,第一个参数是控件的id,第二个是该属性的值
     4.为RemoteViews对象的布局文件中的控件设置点击事件:从上面来看我们不能通过RemoteViews对象找到某一个控件,因此如果要为控件设置点击事件的话我们需要借助RemoteViews对像的方法:setOnClickPendingIntent(即需要借助PendingIntent对象来实现我们点击控件后需要完成的动作),其参数列表为:
        int viewId:需要设置点击事件的控件的id
        PendingIntent pendingIntent:该对象封装了我们点击控件后需要完成的动作,一般我们会创建一个用于启动广播接收者的PendingIntent对象,在广播接收者中处理我们的点击事件(也就是说我们还要再自定义一个广播接收者用于处理点击事件,所需的数据通过PendingIntent携带)

接下来再让我们回到服务:有时我们需要知道服务的工作情况(如开启服务完成下载工作,需要将下载进度通知给用户),这是我们就可以为服务设置一个长驻通知栏的通知,用于显示工作情况,要达到该效果,只要我们在服务中创建一个常驻通知栏的Notification并调用服务的startForeground方法即可,其参数列表为:
    int id:通知的id
    Notification notification:需被显示的通知
关注微信公众号:猿聚于此,可获取更多文章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值