Notification的创建和动态更新

Notification也是我学习安卓以来遇到过的一个大坑,各种方法弃用,各种查资料。哎,说多了都是泪。终于可以告一段落,之前也写过Notification的内容,但是是插在一个项目里,这次就单独拿出来,虽然只是代码段,但是我都是测试过的哟。

首先,还是理一下思路:

1、创建Notification

Notification的创建有两种,第一种是直接创建

Notification notification = new Notification();

然后开始在notification下添加参数,但是这种创建方法里有很多参数方法被弃用了,Google现在推荐我们使用构造器来创建,我们主要就是来看下构造器,构造器没啥参数,直接new出来就可以了

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
构造器完成后,我们就开始通过构造器添加参数

builder.setCustomContentView(remoteViews);
这是用来配置自定义布局,参数是一个RemoteViews,再来看RemoteViews的创建

        RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_notification);
        remoteViews.setTextViewText(R.id.TV_Notification, "这是一个测试");
        remoteViews.setImageViewResource(R.id.IV_Notification, R.mipmap.ic_launcher);
构造函数的第一个参数是包名,第二个参数是布局资源

RemoteViews的方法还是很简单的,他给我们封装了设置内部控件属性的方法。一个资源ID对应一个值,对于布局内部的按钮也是可以设置点击事件的,我就不解释了。

然后我再列一些普通常用的属性

  1.         builder.setContentTitle("播放音乐")  
  2.                 .setTicker("通知来啦")  
  3.                 .setSmallIcon(R.mipmap.ic_launcher)  
  4.                 .setContentText(saved_FilePath)  
  5.                 .setAutoCancel(true)  
  6.                 .setNumber(1)  
  7.                 .setSound(Uri.parse(saved_FilePath))  
  8.                 .setPriority(NotificationCompat.PRIORITY_MAX)  
  9.                 .setContentIntent(pendingIntent);  

标题;下拉提示;小图标;内容;点击自动取消;设置id编号;设置提示音;设置优先级;设置点击事件

这里面讲几个点,第一个是音乐,setSound可以是自定义也可以通过默认设置,但是如果自定义那需要的是一个URI,这里的saved_FilePath是一个存放在内部存储里的音乐文件的绝对路径。

第二个要讲的就是PandingIntent看一下他的构造方式

PendingIntent pendingIntent = PendingIntent.getActivity();
他也是通过给定的构造方法来返回一个配置好的PendingIntent,再来看下getActivity方法

    public static PendingIntent getActivity(Context context, int requestCode, Intent intent, @Flags int flags)
第一个参数Context大家都懂,第二个参数,是一个标识,用来标识发送者(文档说这个不是很重要),第三个就是一个正常的Intent,最后一个旗帜标识我来列一下

FLAG_ONE_SHOT,
FLAG_NO_CREATE,
FLAG_CANCEL_CURRENT,
FLAG_UPDATE_CURRENT,
这些标识的对象都是Notification点击后的效果

1、只能生效一次。

2、没效果

后面两个有点小复杂,都是在同一个Notification触发了好多次的情况下使用

3、当Notification已存在,新来的消息自动取消,PendingIntent维持原状

4、这个就是后来的覆盖原来的


最后就是builder.build()他会返回一个notification对象,并且按照我们的设置的模板已经配置好的

好了,到这里创建就讲完了,其他细节,之后慢慢补充

然后就是调用

这里就要讲两个启动方法

一、作为普通提醒启动

那就要用到之前的NotificationManager

notificationManager.notify(1, builder.build()); 

如果你在线程里修改了数据,可以再次调用notify去更新数据,不然新数据不生效的,注意不要再主线程里做这个延时的操作哦

二、就是作为前台服务

这个其实比之前的简单,他都不需要NotificationManager

startForeground(1,builder.build());
参数都是一模一样的,当然作用也是一样的,当然要更新数据也是需要再次调用的哦

好了  这篇就到这里  感觉 不错哦









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值