Activity之Notification(通知)

Notification(通知)

1.定义:显示在手机状态栏的通知,Notification所表示的通知是一种全局效果的通知,程序一般通过NotificationManager来发送通知。

① Android3.0 之前使用NotificationCompat.Builder来就构建通知(使用的兼容包v4包NotificationCompat类在v4包中:android.support.v4.app.NotificationCompat

② Android3.0后,使用Notification.Builder类来构建Notification对象


2.NotificationManager(通知管理器类)

① NotificationManager类是一个通知管理器类。这个对象是由系统维护的服务,是一单例模式获得,所以一般不直接实例化此类得到NotificationMana对象。

在Activity中,通过getSystemService(Context.NOTIFICATION_SERVICE)来的到对象。

② 通知一般使用NotificationManager服务来发送一个Notification对象来完成。NotificationManager是一个非常重要的系统级服务,位于Android应用程序的框架层。Notification可以通过它向系统发送全局的通知。这个时候需要Notification对象来用于承载通知的内容。一般情况下,并不直接实例化Notification这个类,而是实例化它的内部类Notification.Builder(Android3.0之下使用NotificationCompat.Builder),并设置通知的各种属性。最后使用builder()得到Notification对象,在使用Notificationmanager.notify()发送通知。


实例化Notification.Builder(或NotificationCompat.Builder)它是,需要设置若干通知的属性,有些是必要的有些是可选的属性。

必须要设置的属性: 1.小图标setSmallIcon()

                                 2.通知标题setContentTitle()

                                 3.通知内容舌头ContentText()



Notification.Builder类中提供的方法:
builder.setAutoCancel(); 设置点击通知后,状态栏自动删除通知。
builder.setSmallIcon(R.drawable.alert); 设置通知小图标
builder.setLargeIcon(R.drawable.alert2); 设置通知大图标
builder.setContentTitle("标题"); 设置通知标题
builder.setContentText("文本");  设置通知内容
builder.setDefaults(Notification.DEFAULT_SOUND
| Notification.DEFAULT_VIBRATE);  设置通知的音乐、振动、LED等。
builder.setSound();  设置通知的音乐
builder.setTicker();  设置通知在状态栏的提示文本。第一次提示消息的时候显示在通知栏上。
builder.setContentIntent();  设置点击通知后将要启动的程序组件对应的PendingIntent。


3.发送通知:(步骤)

①调用getSystemService(NOTIFICATION_SERVICE)方法来获得系统的NotificationManager对象。(NotificationManager服务是一个重要的服务,可以通过它向系统发送全局的通知。)

②构建Notification.Builder对象

③设置Builder对象的属性(至少设置3个必需的smallIcon,contentTitle,contentText),并使用.builder()构建Notification对象

通过NotificationManager notify()方法发送Notification。


实例:


Notification.Builder builder1 = new Notification.Builder(this);
builder1.setSmallIcon(R.drawable.ic_launcher);
builder1.setContentTitle("提示:");
builder1.setContentText("请注意休息,时间到了!"); builder1.setAutoCancel(true);
Intent intent = new Intent(this, NextActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 1, intent,
PendingIntent.FLAG_ONE_SHOT);
builder1.setContentIntent(pIntent);
getSystemService(Context.NOTIFICATION_SERVICE).notify(R.id.button_main_common, builder1.build());



4.PendingIntent

字面意思为“等待的,为决定的Intent”

1、PendingIntent字面意义:等待的,悬而未决的Intent;Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装;


2、得到一个 PendingIntent 对象,使用方法类的静态方法 getActivity(Context, int,
Intent, int);
3、PendingIntent是一种特殊的Intent。主要的区别在于Intent是立刻执行,而 PendingIntent 的执行不是立刻,而是当条件满足后才发送企图,而且PendingIntent 可以取消
4、PendingIntent执行的操作实质上是参数传进来的Intent的操作,使用 PendingIntent 的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。
5、主要的使用的地方和例子:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager的执行等。
 总而言之,PendingIntent就是一个可以在满足一定条件下执行的Intent,它相比于Intent的优势在于自己携带有Context对象,这样他就不必依赖于某个activity才可以存在。
 
补充:

1、Intent和PendingIntent的区别:掌握,以备面试之需】
  1.  Intent是立即使用的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel
  2.  Intent在程序结束后即终止,而PendingIntent在程序结束后依然有效
  3.  PendingIntent自带Context,而Intent需要在某个Context内运行;
  4.  Intent在原task中运行,PendingIntent在新的task中运行。
2、PendingIntent的几个常量:(getActivity(Context, int, Intent, int)方法中的第四个参数
  1. FLAG_ONE_SHOT  : 这个PendingIntent只能使用一次。
  2. FLAG_NO_CREATE : 如果被描述的PendingIntent不存在,那么简单地返回null,而不是创建它。
  3. FLAG_CANCEL_CURRENT  :  如果被描述的PendingIntent已经存在,在即将生成一个新的PendingIntent前,当前的一个要被取消。
  4. FLAG_UPDATE_CURRENT  :如果被描述的PendingIntent已经存在,那么继续保持它,但它其中的数据会因为新Intent而更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值