Android学习-通知的使用详解

通知(Notification)是安卓系统特色的功能,当某个程序在后台运行希望向用户发送一个信息是,便可用通知来实现,手机的状态栏会显示一个通知的图标。

1.基本用法

首先使用Context的getSystemService()方法获得NotificationManager来对通知进行管理,如下:

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

然后使用Builder构造器来构造一个Notification对象,可用多个方法来丰富Notification对象。

    Notification notification=new NotifucationCompat.Builder(context)
.setContentTitle("title")
.setContentText("text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.small_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.large_icon))
    .build(),

第1-5分别设置的是标题、内容、显示的时间、小图标、大图标下拉系统状态栏的时候就能看到大图标了。
之后就可以调用NotificationManager的notify()方法让通知显示出来:

manager.notify(1,notification);

第一个参数是Id要保证每一个通知的Id都是不同的。第二个则是通知的对象。
要想状态栏发出的通知点击之后有相应的效果,需要用PendingIntent来实现,指明某个意图,可用于启动活动,启动服务以及发送广播,主要提供了几个静态的方法
getActivity(),getBroadcast(),getService()
都是4个参数,第一个是context,第二个一般用不到写0,第三个参数是一个Intent对象,可以通过这个对象构建出PendingIntent的意图。第四个参数用于确定PendingIntent的行为,有
FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT四个值可以选,含义可参考文档,一般写0即可。
NotificationCompat.Builder有一个setContentIntent()的方法,接收的参数正式一个PendingIntent对象。
给通知加上点击的功能可用下面来实现:

public void onClick(View v){
        switch (v.getId()){
            case R.id.send_notice:
                Intent intent=new Intent(this,NotificationActivity.class);
                PendingIntent pi=PendingIntent.getActivity(this,0,intent,0);

                NotificationManager manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                Notification notification =new NotificationCompat.Builder(this)
                        .setContentTitle("this is content title")
                        .setContentText("this is content text")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                        .setContentIntent(pi)
                        .setAutoCancel(true)
                        .setPriority(NotificationCompat.PRIORITY_MAX)
                        .build();
                manager.notify(1,notification);
                break;
            default:
                break;

        }

让状态栏的通知消失有两种办法:1。setAutoCancel(true) 2。写法如下:

public class NotificationActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notification_layout);
        NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        manager.cancel(1);
    }
}

cacel()中的参数与通知的id对应。

2.通知的进阶技巧

NotificationCompat.Builder提供了丰富的API.

通知的时候播放一段音频

.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))

通知让手机振动

.setVibrate(new long[]){0,1000,1000,1000}

一个数组用于设置静止和振动的时长,下标为0(偶数)的值表示静止的时长,下标为1(奇数)的值表示振动的时长
振动需要在 AndroidManifest.xml中声明权限

<uses-permission android:name="android.permission.VIBRATE"/>

控制LED灯的显示

.setLights(Color.GREEN,1000,1000)

参数为:颜色,亮的时长,暗的时长

通知的默认效果
如果不想进项那么多复杂的设置可以使用通知的默认效果,设置方法如下:

.setDefaults(NotificationCompat.DEFAULT_ALL)

3.通知的高级功能

setStyle()
用来构建富文本的通知的内容,也就是通知不仅仅可以包含文字和图标,还可以包含更多的东西,setStyle()方法接收一个NotificationCompat.Style参数,用来构建具体的富文本信息如:长文字,图片。
直接使用:

.setContentText("长文字")

会导致文字不能完全显示,以省略号表示多余的部分,可以用.setStyle():

.setStyle(new NotificationCompat.BigTextStyle.bigText("长文字"))

用NotificationCompat.BigTextStyle对象来封装长文字,在用bigText方法将文字穿进去,
类似的方法可以限制大图

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.big_image)))

.setPriority()

.setPriority(NotificationCompat.PRIORITY_MAX)

设置优先级,由低到高有五个值可以选:
PRIORITY_DEFAULT
PRIORITY_MIN
PRIORITY_LOW
PRIORITY_HIGH
PRIORITY_MAX
把级别设置成最高级别的通知在状态栏显示的不是提分小图标,而是一个横幅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值