• Android中的消息通知(NotificationManager和Notification)


     

    下面来谈谈notification,这个notification一般用在电话,短 信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这个快讯。已添加的 Notification.Builder,使其更容易构建通知。notification是一种让你的应用程序在没有开启情况下或在后台运行警示用户。 它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。

        先来区分以下状态栏和状态条的区别:

        1、状态条就是手机屏幕最上方的一个条形状的区域;

              在状态条有好多信息量:比如usb连接图标,手机信号图标,电池电量图标,时间图标等等;

        2、状态栏就是手从状态条滑下来的可以伸缩的view;

              在状态栏中一般有两类(使用FLAG_标记):

              (1)正在进行的程序;

              (2)是通知事件;

     

         快速创建一个Notification的步骤简单可以分为以下四步:

    第一步:通过getSystemService()方法得到NotificationManager对象;

    1.nManager = (NotificationManager) this.getSystemService(service);

    第二步:对Notification的一些属性进行设置比如:内容,图标,标题,相应notification的动作进行处理等等;

     

    01.notification.icon = R.drawable.ic_launcher;// 设置通知的图标 
    02.notification.tickerText = tickerText; // 显示在状态栏中的文字 
    03.notification.when = when; // 设置来通知时的时间 
    04.notification.sound = Uri.parse("android.resource://com.sun.alex/raw/dida"); // 自定义声音 
    05.notification.flags = Notification.FLAG_NO_CLEAR; // 点击清除按钮时就会清除消息通知,但是点击通知栏的通知时不会消失 
    06.notification.flags = Notification.FLAG_ONGOING_EVENT; // 点击清除按钮不会清除消息通知,可以用来表示在正在运行 
    07.notification.flags |= Notification.FLAG_AUTO_CANCEL; // 点击清除按钮或点击通知后会自动消失 
    08.notification.flags |= Notification.FLAG_INSISTENT; // 一直进行,比如音乐一直播放,知道用户响应 
    09.notification.defaults = Notification.DEFAULT_SOUND; // 调用系统自带声音 
    10.notification.defaults = Notification.DEFAULT_VIBRATE;// 设置默认震动 
    11.notification.defaults = Notification.DEFAULT_ALL; // 设置铃声震动 
    12.notification.defaults = Notification.DEFAULT_ALL; // 把所有的属性设置成默认

    第三步:通过NotificationManager对象的notify()方法来执行一个notification的消息;

    1.nManager.notify(ID, notification);

    第四步:通过NotificationManager对象的cancel()方法来取消一个notificatioin的消息;

    1.nManager.cancel(ID);

     Notification.build构造Notification方法介绍:   

         void setLatestEventInfo(Context context , CharSequencecontentTitle,CharSequence  contentText,PendingIntent contentIntent)  

            功能: 显示在拉伸状态栏中的Notification属性,点击后将发送PendingIntent对象

            参数:    context              上下文环境

                          contentTitle       状态栏中的大标题

                          contentText       状态栏中的小标题

                          contentIntent    点击后将发送PendingIntent对象

          说明:要是在Notification中加入图标,在状态栏和状态条中显示图标一定要用这个方法,否则报错!

     

    NotificationManager类的常用方法:

                 通过获取系统服务来获取该对象:           

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

     

          NotificationManager常用方法介绍:

                   public  void cancelAll()                                                          移除所有通知 (只是针对当前Context下的Notification)

                   public  void cancel(int id)                                                      移除标记为id的通知 (只是针对当前Context下的所有Notification)

                   public  void notify(String tag ,int id, Notification notification) 将通知加入状态栏, 标签为tag,标记为id

                   public  void notify(int id, Notification notification)                   将通知加入状态栏,,标记为id

    01.package com.sun.alex; 
    02. 
    03.import android.app.Activity; 
    04.import android.app.Notification; 
    05.import android.app.NotificationManager; 
    06.import android.app.PendingIntent; 
    07.import android.content.Intent; 
    08.import android.net.Uri; 
    09.import android.os.Bundle; 
    10.import android.view.View; 
    11.import android.view.View.OnClickListener; 
    12.import android.widget.Button; 
    13. 
    14.public class NotificationActivity extends Activity { 
    15. 
    16.private Button sendBtn, cancelBtn; 
    17.private Notification notification; 
    18.private NotificationManager nManager; 
    19.private Intent intent; 
    20.private PendingIntent pIntent; 
    21.// Notification的标示ID 
    22.private static final int ID = 1
    23. 
    24.@Override 
    25.public void onCreate(Bundle savedInstanceState) { 
    26.super.onCreate(savedInstanceState); 
    27.setContentView(R.layout.main); 
    28. 
    29.sendBtn = (Button) this.findViewById(R.id.send); 
    30.cancelBtn = (Button) this.findViewById(R.id.cancel); 
    31. 
    32.String service = NOTIFICATION_SERVICE; 
    33.nManager = (NotificationManager) this.getSystemService(service); 
    34. 
    35.notification = new Notification(); 
    36.String tickerText = "测试Notifaction"; // 通知提示 
    37.// 显示时间 
    38.long when = System.currentTimeMillis(); 
    39. 
    40.notification.icon = R.drawable.ic_launcher;// 设置通知的图标 
    41.notification.tickerText = tickerText; // 显示在状态栏中的文字 
    42.notification.when = when; // 设置来通知时的时间 
    43.notification.sound = Uri.parse("android.resource://com.sun.alex/raw/dida"); // 自定义声音 
    44.notification.flags = Notification.FLAG_NO_CLEAR; // 点击清除按钮时就会清除消息通知,但是点击通知栏的通知时不会消失 
    45.notification.flags = Notification.FLAG_ONGOING_EVENT; // 点击清除按钮不会清除消息通知,可以用来表示在正在运行 
    46.notification.flags |= Notification.FLAG_AUTO_CANCEL; // 点击清除按钮或点击通知后会自动消失 
    47.notification.flags |= Notification.FLAG_INSISTENT; // 一直进行,比如音乐一直播放,知道用户响应 
    48.notification.defaults = Notification.DEFAULT_SOUND; // 调用系统自带声音 
    49.notification.defaults = Notification.DEFAULT_SOUND;// 设置默认铃声 
    50.notification.defaults = Notification.DEFAULT_VIBRATE;// 设置默认震动 
    51.notification.defaults = Notification.DEFAULT_ALL; // 设置铃声震动 
    52.notification.defaults = Notification.DEFAULT_ALL; // 把所有的属性设置成默认 
    53. 
    54.sendBtn.setOnClickListener(sendClickListener); 
    55.cancelBtn.setOnClickListener(cancelClickListener); 
    56.
    57. 
    58.private OnClickListener sendClickListener = new OnClickListener() { 
    59.@Override 
    60.public void onClick(View v) { 
    61.// 单击通知后会跳转到NotificationResult类 
    62.intent = new Intent(NotificationActivity.this
    63.NotificationResult.class); 
    64.// 获取PendingIntent,点击时发送该Intent 
    65.pIntent = PendingIntent.getActivity(NotificationActivity.this, 0
    66.intent, 0); 
    67.// 设置通知的标题和内容 
    68.notification.setLatestEventInfo(NotificationActivity.this, "标题"
    69."内容", pIntent); 
    70.// 发出通知 
    71.nManager.notify(ID, notification); 
    72.
    73.}; 
    74. 
    75.private OnClickListener cancelClickListener = new OnClickListener() { 
    76.@Override 
    77.public void onClick(View v) { 
    78.// 取消通知 
    79.nManager.cancel(ID); 
    80.
    81.}; 
    82.}
  • 相关阅读:
    Java8IntStream数值流的常用操作以及与装箱和拆箱的关系
    iOS滚动回弹修复方案
    ios Safari 不兼容问题 transform rotateY
    typescript的?? 和?: 和?.是什么意思?还有!:
    原生js解决ios手机input输入框弹出覆盖问题
    requestIdleCallback和requestAnimationFrame的区别
    axios的兼容性问题
    第三方直播SDK对比(腾讯云,阿里云,网易云信,七牛云,金山云,声网,即构科技)
    直播平台对比
    react中实现路由缓存和组件缓存
  • 原文地址:https://www.cnblogs.com/xiaoxiaojia/p/5390033.html
Copyright © 2020-2023  润新知