当前位置:首页 > Android > 正文内容

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

jsc10年前 (2016-04-01)Android4169

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

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

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

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

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

          (1)正在进行的程序;

          (2)是通知事件;

 

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

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

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

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

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

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

nManager.notify(ID, notification);

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

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
package com.sun.alex;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class NotificationActivity extends Activity {

    private Button sendBtn, cancelBtn;
    private Notification notification;
    private NotificationManager nManager;
    private Intent intent;
    private PendingIntent pIntent;
    // Notification的标示ID
    private static final int ID = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        sendBtn = (Button) this.findViewById(R.id.send);
        cancelBtn = (Button) this.findViewById(R.id.cancel);

        String service = NOTIFICATION_SERVICE;
        nManager = (NotificationManager) this.getSystemService(service);

        notification = new Notification();
        String tickerText = "测试Notifaction"; // 通知提示
        // 显示时间
        long when = System.currentTimeMillis();

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

        sendBtn.setOnClickListener(sendClickListener);
        cancelBtn.setOnClickListener(cancelClickListener);
    }

    private OnClickListener sendClickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            // 单击通知后会跳转到NotificationResult类
            intent = new Intent(NotificationActivity.this,
                    NotificationResult.class);
            // 获取PendingIntent,点击时发送该Intent
            pIntent = PendingIntent.getActivity(NotificationActivity.this, 0,
                    intent, 0);
            // 设置通知的标题和内容
            notification.setLatestEventInfo(NotificationActivity.this, "标题",
                    "内容", pIntent);
            // 发出通知
            nManager.notify(ID, notification);
        }
    };

    private OnClickListener cancelClickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            // 取消通知
            nManager.cancel(ID);
        }
    };
}


扫描二维码推送至手机访问。

版权声明:本文由微小站发布,如需转载请注明出处。

本文链接:https://jsc0.com/post/56.html

标签: 通知栏相关
分享给朋友:

“Android中的消息通知(NotificationManager和Notification)” 的相关文章

Android中AsyncTask的简单用法

Android中AsyncTask的简单用法

        在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好 的用户体验。但是在子线程中无法去操作主线程(UI 线...

Android中使用PULL方式解析XML文件

Android中使用PULL方式解析XML文件

 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素 并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个s...

Android权限问题整理

Android权限系统非常庞大,我们在Android系统中做任何操作都需要首先获取Android系统权限,本文记录了所有的Android权限问题,整理一下分享给大家。访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数...

google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候,老板说要加上二维码扫描功能,然后自己的屁颠屁颠的去百度,google...

Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性添加图标

Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性添加图标

注:(图中每一个条目和图标都是由代码动态生成) 代码动态布局,并需要为每一个条目设置图标,此时用到了 android:drawableLeft="@drawable/icon" ...

下拉刷新及滚动到底部加载更多的Listview使用

下拉刷新及滚动到底部加载更多的Listview使用

本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用。 该ListView优点包括:a. 可自定义下拉响应事件(如下拉刷新)  b.可自定义滚动到底部响应的事件(如滑动到底部加载更多)  c.可自定义丰富的样式  d....