[android]_[通知]

通知

通知是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。

通知的基本用法

首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到。getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE即可。因此,获取NotificationManager的实例就可以写成:

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

使用support-v4库中提供的NotificationCmopat类的构造器来创建Notification对象,就可以保证我们的程序在所有Android系统版本上都能正常工作了,代码如下:

Notification notification = new NotificationCompat.Builder(context)
                        .setContentTitle("This is content title")
                        .setContentText("This is content text")
                        .setWhen(System.currentTimeMillis())
                        .setSmalllIcon(R.drawble.small_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.large_icon))
                        .build();

只需要调用NotificationManager的nofity()方法就可以让通知显示出来了。notify()方法接收两个参数,第一个参数是id,要保证为每个通知所指定的id都是不同的。第二个参数则是Notification对象,这里直接将我们刚刚创建好的Notification对象传入即可。因此,显示一个通知就可以写成:

    manager.notify(1,notification);

通知的点击事件

要想实现通知的点击效果,我们还需要在代码中进行相应的设置,这就涉及了一个新的概念:PendingIntent,即延迟执行的Intent。

PendingIntent的用法同样很简单,它主要提供了几个静态方法用于获取PendingIntent的实例,可以根据需求来选择是使用getActivity()方法、getBroadcase()方法,还是getService()方法。这几个方法所接收的参数都是相同的,第一个参数依旧是Context,不用多做解释。第二个参数一般用不到,通常都是传入0即可。第三个参数是一个Intent对象,我们可以通过这个对象构建出PendingIntent的“意图”。第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这4种值可选,通常情况下这个参数传入0就可以了。代码如下:

Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);
Notification notification = new NotificationCompat.Builder(context)
                        .setContentTitle("This is content title")
                        .setContentText("This is content text")
                        .setWhen(System.currentTimeMillis())
                        .setSmalllIcon(R.drawble.small_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.large_icon))
                        .setContentIntent(pi)
                        .build();
                        manager.notify(1,notification);

通知消失

让通知消失有两种方法,一种是在NotificationComp.Builder中再连缀一个setAutoCancel()方法,一种是显式地调用NotificationManager的cancel()方法将它取消,代码如下:

Notification notification = new NotificationCompat.Builder(this)
        ...
        .setAutoCancel(true)
        .build();

setAutoCancle()方法传入true,就表示当点击了这个通知的时候,通知会自动取消掉。

第二种写法如下:

NotificationManager manager = (NotificationManager) getSystemServicemanager.cancel(1);

1是通知的id。

通知的进阶技巧

  1. 播放声音

    Notification notification = new NotificationCmopat.Builder(this)
            ...
            .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
            .build();
    
  2. 震动

    Notification notification = new NotificationCmopat.Builder(this)
            ...
            .setVibrate(new long[] {0, 1000, 1000, 1000})//震动1秒静止1秒再震动1秒
            .build();

    震动权限:

    <uses-permission android:name="android.permission.VIBRATE" />
  3. LED闪烁

    Notification notification = new NotificationCmopat.Builder(this)
            ...
            .setDefaults(NotifiationCompt.DEFAULT_ALL)
            .build();
  4. 通知的高级功能

    显示长文字,通过setStyle()方法,代码如下所示:

    Notification notification = new NotificationCmopat.Builder(this)
            ...
            .setStyle(new NotificationCompat.BigTextStyle().bigText("..."))
            .build();

    通知显示大图片:

    Notification notification = new NotificationCmopat.Builder(this)
            ...
            .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.big_image)))
            .build();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值