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

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

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

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

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

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

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

(1)正在进行的程序;

(2)是通知事件;

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

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

Java代码  

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

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

Java代码  

  1. notification.icon = R.drawable.ic_launcher;// 设置通知的图标
  2. notification.tickerText = tickerText; // 显示在状态栏中的文字
  3. notification.when = when; // 设置来通知时的时间
  4. notification.sound = Uri.parse("android.resource://com.sun.alex/raw/dida"); // 自定义声音
  5. notification.flags = Notification.FLAG_NO_CLEAR; // 点击清除按钮时就会清除消息通知,但是点击通知栏的通知时不会消失
  6. notification.flags = Notification.FLAG_ONGOING_EVENT; // 点击清除按钮不会清除消息通知,可以用来表示在正在运行
  7. notification.flags |= Notification.FLAG_AUTO_CANCEL; // 点击清除按钮或点击通知后会自动消失
  8. notification.flags |= Notification.FLAG_INSISTENT; // 一直进行,比如音乐一直播放,知道用户响应
  9. 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的消息;

Java代码  

  1. nManager.notify(ID, notification);

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

Java代码  

  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

Java代码  

  1. package com.sun.alex;
  2. import android.app.Activity;
  3. import android.app.Notification;
  4. import android.app.NotificationManager;
  5. import android.app.PendingIntent;
  6. import android.content.Intent;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.widget.Button;
  12. public class NotificationActivity extends Activity {
  13. private Button sendBtn, cancelBtn;
  14. private Notification notification;
  15. private NotificationManager nManager;
  16. private Intent intent;
  17. private PendingIntent pIntent;
  18. // Notification的标示ID
  19. private static final int ID = 1;
  20. @Override
  21. public void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.main);
  24. sendBtn = (Button) this.findViewById(R.id.send);
  25. cancelBtn = (Button) this.findViewById(R.id.cancel);
  26. String service = NOTIFICATION_SERVICE;
  27. nManager = (NotificationManager) this.getSystemService(service);
  28. notification = new Notification();
  29. String tickerText = "测试Notifaction"; // 通知提示
  30. // 显示时间
  31. long when = System.currentTimeMillis();
  32. notification.icon = R.drawable.ic_launcher;// 设置通知的图标
  33. notification.tickerText = tickerText; // 显示在状态栏中的文字
  34. notification.when = when; // 设置来通知时的时间
  35. notification.sound = Uri.parse("android.resource://com.sun.alex/raw/dida"); // 自定义声音
  36. notification.flags = Notification.FLAG_NO_CLEAR; // 点击清除按钮时就会清除消息通知,但是点击通知栏的通知时不会消失
  37. notification.flags = Notification.FLAG_ONGOING_EVENT; // 点击清除按钮不会清除消息通知,可以用来表示在正在运行
  38. notification.flags |= Notification.FLAG_AUTO_CANCEL; // 点击清除按钮或点击通知后会自动消失
  39. notification.flags |= Notification.FLAG_INSISTENT; // 一直进行,比如音乐一直播放,知道用户响应
  40. notification.defaults = Notification.DEFAULT_SOUND; // 调用系统自带声音
  41. notification.defaults = Notification.DEFAULT_SOUND;// 设置默认铃声
  42. notification.defaults = Notification.DEFAULT_VIBRATE;// 设置默认震动
  43. notification.defaults = Notification.DEFAULT_ALL; // 设置铃声震动
  44. notification.defaults = Notification.DEFAULT_ALL; // 把所有的属性设置成默认
  45. sendBtn.setOnClickListener(sendClickListener);
  46. cancelBtn.setOnClickListener(cancelClickListener);
  47. }
  48. private OnClickListener sendClickListener = new OnClickListener() {
  49. @Override
  50. public void onClick(View v) {
  51. // 单击通知后会跳转到NotificationResult类
  52. intent = new Intent(NotificationActivity.this,
  53. NotificationResult.class);
  54. // 获取PendingIntent,点击时发送该Intent
  55. pIntent = PendingIntent.getActivity(NotificationActivity.this, 0,
  56. intent, 0);
  57. // 设置通知的标题和内容
  58. notification.setLatestEventInfo(NotificationActivity.this, "标题",
  59. "内容", pIntent);
  60. // 发出通知
  61. nManager.notify(ID, notification);
  62. }
  63. };
  64. private OnClickListener cancelClickListener = new OnClickListener() {
  65. @Override
  66. public void onClick(View v) {
  67. // 取消通知
  68. nManager.cancel(ID);
  69. }
  70. };
  71. }
时间: 2024-10-13 17:49:17

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

Android中的消息通知Toast和Notification

Android中的消息通知Toast和Notification 1.弹出通知Toast MainActivity.java 1 package com.example.toast; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.Gravity; 6 import android.view.Menu; 7 import android.view.View; 8 import an

android 实现自定义状态栏通知(Status Notification)

在android项目的开发中,有时为了实现和用户更好的交互,在通知栏这一小小的旮旯里,我们通常需要将内容丰富起来,这个时候我们就需要去实现自定义的通知栏,例如下面360或者网易的样式: 首先我们要了解的是 自定义布局文件支持的控件类型:Notification的自定义布局是RemoteViews,因此,它仅支持FrameLayout.LinearLayout.RelativeLayout三种布局控件,同时支持AnalogClock.Chronometer.Button.ImageButton.I

Android中的消息机制

在分析Android消息机制之前.我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListener { private TextView stateText; private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

浅析Android中的消息机制(转)

原博客地址:http://blog.csdn.net/liuhe688/article/details/6407225 在分析Android消息机制之前,我们先来看一段代码: 1 public class MainActivity extends Activity implements View.OnClickListener { 2 private TextView stateText; 3 private Button btn; 4 5 @Override 6 public void onC

浅析Android中的消息机制-解决:Only the original thread that created a view hierarchy can touch its views.

在分析Android消息机制之前,我们先来看一段代码: [html] view plaincopyprint? public class MainActivity extends Activity implements View.OnClickListener { private TextView stateText; private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onC

浅析Android中的消息机制(转)

在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListener { private TextView stateText; private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

深入解析Android中Handler消息机制

Android提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange).Handler消息机制可以说是Android系统中最重要部分之一,所以,本篇博客我们就来深入解析Android中Handler消息机制. Handler的简单使用 为什么系统不允许子线程更新UI 因为的UI控件不是线程安全的. 如果在多线程中并发访问可能会导致UI控件处于不可预期的状态,那为什么不对UI控件的访

Android 中的消息模型(Message,MessageQueue,handle,looper)

Android 中的消息模型(Message,MessageQueue,handle,looper,) Android 中的消息通讯 1.Android 中线程的应用机制? 1)Android 中所有的耗时操作应在工作线程执行. 2)Android 中所有的UI操作应该在主线程(UI线程)执行. FAQ? 1)主线程执行执行耗时操作好吗? 不好,这样会阻塞UI操作. 2)工作执行完耗时操作,假如有数据要传递给主线程,那如何实现? 2.Android 中多线程应用时的消息模型? 使用Android

Android学习笔记(32):通知推送Notification

Notification用于显示在手机状态栏的通知.一般通过NotificationManager服务来发送通知. Notification.Builder类可以让我们更加方便的创建Notification对象. Notification.Builder常用方法: setAutoCancel():设置点击通知后,状态栏自动删除通知 setContentText():设置通知内容 setContentTitle():设置通知标题 setContentIntent():设置点击后要启动的程序组件对应