通知(Notification)的简单使用

通知(Notification)的简单使用

运行效果

运行效果

创建通知

首先,代码如下,我们再慢慢说:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button) findViewById(R.id.send_notice);
    button.setOnClickListener(this);

    }


@Override
public void onClick(View v) {
   switch (v.getId()) {
       case R.id.send_notice:
           // 主要看这几句
           NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
           Notification notification = new NotificationCompat.Builder(this)
                   .setContentTitle("Notification")
                   .setContentText("This is Details!")
                   .setSmallIcon(R.mipmap.ic_launcher)
                   .build();
        manager.notify(SIMPLE_NOTIFICATION, notification);
           break;
        default:
           break;
        }
    }

首先,你需要一个NotificationManager的实例对所有的通知进行管理。可以在Context中的getSystemService()函数得到。这个函数有一个字符串参数,用于确定是获得哪一个服务,使用常量Context.NOTIFICATION_SERVICE就可以得到实例了,其它的还有什么服务呢???还有很多很多服务

第二步就是构建通知的实例,这里使用一个NotificationCompat类的.Builder()方法(需要一个Context参数)进行构建.build()方法构建完成,我们可以在其中添加很多其它设置不同参数的方法,来自定义通知的内容。

为什么NotificationCompat类要使用support-v4库中的类,我看见support-v7库中也有这个类,它们之间有什么区别吗??目前,我还不清楚

不过,还是先看看目前我们要用的设置通知的方法

  • setContentTitile 非必须的,标题
  • setContentText 非必须的,正文,不能超过一行,多余的用省略号表示
  • setWhen 非必须,通知创建的时间
  • setSmallIcon 必须的,不然会出错。在状态栏显示的小图标
  • setLargeIcon 非必须的,通知上的大图标

最后,使用第一步得到的NotificationManager的实例中的notify()方法,第一个参数是id,保证每次启动通知的ID都是不同的,第二个参数就是一个通知的实例。就可以启动通知了。

点击通知启动活动

目前我们显示的通知是不能点击的,想实现点击效果就必须学习新的东西,开始吧。
首先,NotificationCompat中有一个setContentIntent()方法可以让通知可以点击,这个方法需要传入一个PendingIntent参数,所以,需要了解一下PendingIntent是什么东西。

然后,我们就来看看这个PendingIntent,它与Intent很像,都是用来启动活动,广播和服务的,区别也很明显。就是它是只用在通知上,不是通知创建时就执行这个PendingIntent,而是通知被点击时,PendingIntent才会执行,这就是最大的不同了。

最后,怎么创建一个PendingIntent呢?使用PedningIntent的getActivity(),getBroadCasr(),getService()方法就可以得到对应的实例了,这几个方法有相同的参数,第一个参数是Context,第二个参数不知道是什么,一般传0就可以了,第三个参数是Intent,用来知道启动哪个活动,广播和服务,最后一个参数也不知道是什么,不过一般也是传0就可以了。

好了使用第一步的setContentIntent()方法将PendingIntent实例传入就可以实现通知的点击功能了。。。

代码如下 :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button) findViewById(R.id.send_notice);
    button.setOnClickListener(this);

    }


@Override
public void onClick(View v) {
   switch (v.getId()) {
       case R.id.send_notice:
           // 多出下面这两行
           Intent intent = new Intent(this, NotificationActivity.class);
           PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

           NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
           Notification notification = new NotificationCompat.Builder(this)
                   .setContentTitle("Notification")
                   .setContentText("This is Details!")
                   .setSmallIcon(R.mipmap.ic_launcher)
                   .setContentIntent(pendingIntent)  //  还有这一行
                   .build();
        manager.notify(1, notification);
           break;
        default:
           break;
        }
    }

取消通知

当我们点击通知后,通知启动了一个活动,但是通知却没有消失,我们再次点击通知时,它又启动了一个活动,这可不行,根据之前,学习的活动的启动模式中的知识。以默认Standard模式启动同一个活动两次也是两个不同的活动。所以为了不出现这种情况,必须在通知被点击后就消失才行。。

方法1、在创建Notification中可以使用setAutoCanel()方法,参数是一个boolean的变量,表示是否使用自动取消通知(在点击后自动消失)。

Notification notification = new NotificationCompat.Builder(this)
        .setContentTitle("Notification")
        .setContentText("This is Details!")
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentIntent(pendingIntent)  
        .setAutoCanel(true)  // 自动取消通知
        .build();

方法2、使用NotificationManager的实例的canel()方法也可以取消通知,需要传入一个id参数,对,就是上面说的保证每次通知都不同的那个id,这样才能确定取消的是哪个通知。

manager.canel(1);    //也可以取消通知的显示(显式取消)

进阶使用通知

在创建通知时可以使用大量的设置方法来丰富自己的通知

setSound():设置铃声
setVibrate():设置震动
setLights():设置指示灯
setDefaults():对上面的设置使用默认设置
setStyle():设置通知的风格
setPriority():设置通知的重要等级(就像QQ弹出消息的那种通知)

这几个方法是比较常用的,大家需要使用时,可以去自己去查询资料。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值