Notification的基本用法以及使用RemoteView实现自定义

Notification的作用

Notification是一种全局效果的通知,在系统的通知栏中显示。既然作为通知,其基本作用有:

  显示接收到短消息、即时信息等

  显示客户端的推送(广告、优惠、新闻等)

  显示正在进行的事物(后台运行的程序,如音乐播放进度、下载进度)

Notification的基本操作:

Notification的基本操作主要有创建、更新和取消三种。一个Notification的必要属性有三项,如果不设置的话在运行时会抛出异常:

小图标,通过setSmallIcon方法设置

标题,通过setContentTitle方法设置

内容,通过setContentText方法设置。

除了以上三项,其他均为可选项,不过一般而言,通知需要有交互的功能,所以一般Notification具有Action属性,这样就能跳转到App的某一个Activity、启动一个service或者发送一个Broadcast。

当系统受到通知时,可以通过震动、铃声、呼吸灯等多种方式进行提醒。

下面就从Notification的基本操作逐条介绍:

Notification的创建

Notification的创建过程主要涉及到Notification.Builder、Notification、NotificationManager

Notification.Builder:

使用建造者模式构建Notification对象。由于Notification.Builder仅支持Android4.1及之后的版本,为了解决兼容性的问题,使用V4兼容库中的NotifivationCompat.Builder类。

Notification:通知对应类,保存通知相关的数据。NotificationManager向系统发送通知时会用到。

NotificationManager:通知管理类,调用NotificationManager的notify方法可以向系统发送通知。

获取 NotificationManager 对象:

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

前面讲到,Notification有三个必要属性以及一个很有必要的属性Action。下面我们就创建一个简单的Notification,主要有以下三步:

获取NotificationManager实例

实例化NotificationCompat.Builder并设置相关属性

通过builder.build方法来生成Notification对象,并发送通知

private void sendNotification(){ Intent intent = new Intent(this,SettingsActivity.class); PendingIntent mPendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) //设置小图标 .setSmallIcon(R.mipmap.ic_launcher) //点击后自动清除 .setAutoCancel(true) //设置通知标题 .setContentTitle("最简单的通知") //设置通知内容 .setContentText("真的很简单很简单很简单") //设置通知的动作 .setContentIntent(mPendingIntent) //设置通知时间,默认为系统发出通知的时间 .setWhen(System.currentTimeMillis()); //第一个参数为Notification的id notificationManager.notify(2,builder.build()); }

其中为了实现Action属性,我们需要创建Intent、PendingIntent和setContentIntent()这几步。

不难发现,其中的PendingIntent的设置才是其中的关键。

PendingIntent支持三种待定的意图:启动Activity,启动Service和发送Broadcast。对应于它的三个接口方法。

static PendingIntent

 

getActivity(Context context,int requestCode,Intent intent,int flags)

获取一个PendingIntent,该意图发生时,相当于Context.startActivity(Intent)

 

static PendingIntent

 

getService (Context context,int requestCode,Intent intent,int flags)

获取一个PendingIntent,该意图发生时,相当于Context.startService (Intent)

 

static PendingIntent

 

getBroadcast(Context context,int requestCode,Intent intent,int flags)

获取一个PendingIntent,该意图发生时,相当于Context.sendBroadcast(Intent)

 

其中context和intent不需要讲,主要说一下requestCode和flags。其中requestCode是PendingIntent发送发的请求码,多数情况下设置为0即可,requestCode会影响到flags的效果。

PendingIntent相同:Intent相同且requestCode也相同。(Intent相同需要ComponentName和intent-filter相同)

flags的常见类型有:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d3ef519b3abf6e058b5ff03298981ff5.html