zoukankan      html  css  js  c++  java
  • Android学习总结(十五) ———— Notification(状态栏通知)基本用法

    一、Notification基本概念

       Notification是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。我们在用手机的时候,如果来了短信,而我们没有点击查看的话,在手机的最上边的状态栏里有一个短信的小图标提示,这个提示效果就是用Notification来做。

    二、Notification的基本使用流程

      状态通知栏主要涉及到2个类:Notification 和NotificationManager

      Notification:通知信息类,它里面对应了通知栏的各个属性

      NotificationManager:是状态栏通知的管理类,负责发通知、清除通知等操作。

    使用的基本流程:

    1. 获得NotificationManager对象: NotificationManager mNManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    2. 创建一个通知栏的Builder构造类: Notification.Builder mBuilder = new Notification.Builder(this);
    3. 对Builder进行相关的设置,比如标题,内容,图标,动作等!
    4. 调用Builder的build()方法为notification赋值
    5. 调用NotificationManager的notify()方法发送通知! 

      另外我们还可以调用NotificationManager的cancel()方法取消通知

    三、设置相关的一些方法

    • setContentTitle(CharSequence):设置标题  

    • setContentText(CharSequence):设置内容
    • setSubText(CharSequence):设置内容下面一小行的文字
    • setTicker(CharSequence):设置收到通知时在顶部显示的文字信息
    • setWhen(long):设置通知时间,一般设置的是收到通知时的System.currentTimeMillis()
    • setSmallIcon(int):设置右下角的小图标,在接收到通知的时候顶部也会显示这个小图标
    • setLargeIcon(Bitmap):设置左边的大图标
    • setAutoCancel(boolean):用户点击Notification点击面板后是否让通知取消(默认不取消)
    • setDefaults(int):向通知添加声音、闪灯和振动效果的最简单、 使用默认(defaults)属性,可以组合多个属性
    • Notification.DEFAULT_VIBRATE(添加默认震动提醒)
    • Notification.DEFAULT_SOUND(添加默认声音提醒)
    • Notification.DEFAULT_LIGHTS(添加默认三色灯提醒)
    • Notification.DEFAULT_ALL(添加默认以上3种全部提醒)
    • setVibrate(long[]):设置振动方式,比如:setVibrate(new long[] {0,300,500,700});延迟0ms,然后振动300ms,在延迟500ms, 接着再振动700ms
    • setLights(int argb, int onMs, int offMs):设置三色灯,参数依次是:灯光颜色, 亮持续时间,暗的时间,不是所有颜色都可以,这跟设备有关,有些手机还不带三色灯; 另外,还需要为Notification设置flags为Notification.FLAG_SHOW_LIGHTS才支持三色灯提醒!
    • setSound(Uri):设置接收到通知时的铃声,可以用系统的,也可以自己设置,例子如下:
      .setDefaults(Notification.DEFAULT_SOUND) //获取默认铃声
      .setSound(Uri.parse("file:///sdcard/xx/xx.mp3")) //获取自定义铃声
      .setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5")) //获取Android多媒体库内的铃声
    • setOngoing(boolean):设置为ture,表示它为一个正在进行的通知。他们通常是用来表示 一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载, 同步操作,主动网络连接)
    • setProgress(int,int,boolean):设置带进度条的通知 参数依次为:进度条最大数值,当前进度,进度是否不确定 如果为确定的进度条:调用setProgress(max, progress, false)来设置通知, 在更新进度的时候在此发起通知更新progress,并且在下载完成后要移除进度条 ,通过调用setProgress(0, 0, false)既可。如果为不确定(持续活动)的进度条, 这是在处理进度无法准确获知时显示活动正在持续,所以调用setProgress(0, 0, true) ,操作结束时,调用setProgress(0, 0, false)并更新通知以移除指示条
    • setContentInten(PendingIntent):PendingIntent和Intent略有不同,它可以设置执行次数, 主要用于远程服务通信、闹铃、通知、启动器、短信中,在一般情况下用的比较少。比如这里通过 Pending启动Activity:getActivity(Context, int, Intent, int),当然还可以启动Service或者Broadcast PendingIntent的位标识符(第四个参数)
    • FLAG_ONE_SHOT 表示返回的PendingIntent仅能执行一次,执行完后自动取消
    • FLAG_NO_CREATE 表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL
    • FLAG_CANCEL_CURRENT 表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent, 这个有利于数据保持为最新的,可以用于即时通信的通信场景
    • FLAG_UPDATE_CURRENT 表示更新的PendingIntent

    四、示例代码

      首先定义两个简单的按钮,这里就不写出来了,接着在MainActivity类实现功能 ,代码如下所示:

    package com.nyl.notification;
    
    import android.app.Activity;
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends Activity implements View.OnClickListener {
    
        private Context context;
        private NotificationManager notificationManager;
        private Notification notification;
        Bitmap bitmap = null; //位图
        private static final int NOTIFICATION_1 = 1;
    
    
        private Button btnShow;
        private Button btnClose;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
            //创建图片的Bitmap
            bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.activity_main);
            notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            initView(); //初始化控件
        }
    
        /**
         * 初始化布局控件
         */
        private void initView() {
            btnShow = (Button) findViewById(R.id.btnShow);
            btnClose = (Button) findViewById(R.id.btnClose);
    
            btnShow.setOnClickListener(this);
            btnClose.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.btnShow:
                    // //定义一个PendingIntent点击Notification后启动一个Activity
                    Intent intent = new Intent(context,OtherActivity.class);
                    PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent,0);
    
                    //设置图片,通知标题,发送时间,提示方式等属性
                    Notification.Builder builder = new Notification.Builder(this);
                    //标题
                    builder.setContentTitle("状态栏通知")
                            .setContentText("状态栏会显示一个通知栏的图标") //内容
                            .setSubText("丰富你的程序,运用手机多媒体") //内容下面的一小段文字
                            .setTicker("收到Notification信息")   //收到信息后状态显示的文字信息
                            .setWhen(System.currentTimeMillis()) //设置通知时间
                            .setSmallIcon(R.mipmap.ic_launcher) //设置小图片
                            .setLargeIcon(bitmap) //设置大图片
                            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE) //设置默认的三色灯与振动器
                            .setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.kalimba)) //设置自定义的提示音
                            .setAutoCancel(true) //设置点击后取消Notification
                            .setContentIntent(pendingIntent); //设置pendingIntent
    
                    notification = builder.build();
                    notificationManager.notify(NOTIFICATION_1,notification);
                    break;
    
                case R.id.btnClose:
                    //除了可以根据ID来取消Notification外,还可以调用cancelAll();关闭该应用产生的所有通知
                    notificationManager.cancel(NOTIFICATION_1); //取消Notification
                    break;
    
            }
    
        }
    }

      点击【显示普通的状态栏通知】按钮,运行效果如下:

      

      在手机的最上边的状态栏里出现了【收到Notification信息】的提示消息,向下滑动,可以看到通知的图标,标题,子标题这些内容,如下图所示:

      

      点击通知,就可以看到通知的详细内容,如下图所示:

      

      这里是显示一张照片

      点击【关闭状态栏通知】按钮是关闭手机状态栏上显示通知消息,关闭之后,就看不到了。这里不贴图了。有兴趣的园友自己复制代码去动手体验吧。

      关于Notification的基本用法就先介绍这么多。

  • 相关阅读:
    A1023 Have Fun with Numbers (20分)(大整数四则运算)
    A1096 Consecutive Factors (20分)(质数分解)
    A1078 Hashing (25分)(哈希表、平方探测法)
    A1015 Reversible Primes (20分)(素数判断,进制转换)
    A1081 Rational Sum (20分)
    A1088 Rational Arithmetic (20分)
    A1049 Counting Ones (30分)
    A1008 Elevator (20分)
    A1059 Prime Factors (25分)
    A1155 Heap Paths (30分)
  • 原文地址:https://www.cnblogs.com/nylcy/p/6536790.html
Copyright © 2011-2022 走看看