在Android系统中,发一个状态栏通知还是很方便的。下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置?

首先,发送一个状态栏通知必须用到两个类:  NotificationManager 、 Notification。

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

NotificationManager 是一个系统Service,必须通过 getSystemService()方法来获取。

  1. NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

Notification:是具体的状态栏通知对象,可以设置icon、文字、提示声音、振动等等参数。

下面是设置一个通知需要的基本参数:

  • An icon  (通知的图标)
  • A title and expanded message  (通知的标题和内容)
  • PendingIntent   (点击通知执行页面跳转)

可选的设置:

  • A ticker-text message (状态栏顶部提示消息)
  • An alert sound    (提示音)
  • A vibrate setting  (振动)
  • A flashing LED setting  (灯光)
  • 等等

一、创建Notification

通过NotificationManager  的 notify(int, Notification) 方法来启动Notification。

第一个参数唯一的标识该Notification,第二个参数就是Notification对象。

二、更新Notification

调用Notification的 setLatestEventInfo方法来更新内容,然后再调用NotificationManager的notify()方法即可。(具体可以看下面的实例)

三、删除Notification

通过NotificationManager  的cancel(int)方法,来清除某个通知。其中参数就是Notification的唯一标识ID。

当然也可以通过  cancelAll() 来清除状态栏所有的通知。

四、Notification设置(振动、铃声等)

1. 基本设置:

  1. //新建状态栏通知
  2. baseNF = new Notification();
  3. //设置通知在状态栏显示的图标
  4. baseNF.icon = R.drawable.icon;
  5. //通知时在状态栏显示的内容
  6. baseNF.tickerText = "You clicked BaseNF!";
  7. //通知的默认参数 DEFAULT_SOUND, DEFAULT_VIBRATE, DEFAULT_LIGHTS.
  8. //如果要全部采用默认值, 用 DEFAULT_ALL.
  9. //此处采用默认声音
  10. baseNF.defaults = Notification.DEFAULT_SOUND;
  11. //第二个参数 :下拉状态栏时显示的消息标题 expanded message title
  12. //第三个参数:下拉状态栏时显示的消息内容 expanded message text
  13. //第四个参数:点击该通知时执行页面跳转
  14. baseNF.setLatestEventInfo(Lesson_10.this, "Title01", "Content01", pd);
  15. //发出状态栏通知
  16. //The first parameter is the unique ID for the Notification
  17. // and the second is the Notification object.
  18. nm.notify(Notification_ID_BASE, baseNF);

配一张图作说明:

2. 添加声音

如果要采用默认声音,只要使用default就可以了。

  1. baseNF.defaults = Notification.DEFAULT_SOUND;

如果要使用自定义声音,那么就要用到sound了。如下:

  1. notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");

上面这种方法,使用的是自己的铃声,如果想用系统自带的铃声,可以这样:

  1. notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");

需要注意一点,如果default、sound同时出现,那么sound无效,会使用默认铃声。

默认情况下,通知的声音播放一遍就会结束。 如果你想让声音循环播放,需要为flags参数加上FLAG_INSISTENT。 这样声音会到用户响应才结束,比如下拉状态栏。

  1. notification.flags |= notification.FLAG_INSISTENT;

3. 添加振动

如果是使用默认的振动方式,那么同样也是使用default。

  1. notification.defaults |= Notification.DEFAULT_VIBRATE;

当然也可以自己定义振动形式,这边需要用到Long型数组。

  1. long[] vibrate = {0,100,200,300};
  2. notification.vibrate = vibrate;

这边的Long型数组中,第一个参数是开始振动前等待的时间,第二个参数是第一次振动的时间,第三个参数是第二次振动的时间,以此类推,随便定义多长的数组。但是采用这种方法,没有办法做到重复振动。

同样,如果default、vibrate同时出现时,会采用默认形式。

另外还需要注意一点:使用振动器时需要权限,如下:

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

4. 闪光

使用默认的灯光,如下:

  1. notification.defaults |= Notification.DEFAULT_LIGHTS;

自定义:

  1. notification.ledARGB = 0xff00ff00;
  2. notification.ledOnMS = 300;
  3. notification.ledOffMS = 1000;
  4. notification.flags |= Notification.FLAG_SHOW_LIGHTS;

其中ledARGB 表示灯光颜色、 ledOnMS 亮持续时间、ledOffMS 暗的时间。

注意:这边的颜色跟设备有关,不是所有的颜色都可以,要看具体设备。

5. 其他有用的设置:

flags:

Notification.FLAG_INSISTENT;   //让声音、振动无限循环,直到用户响应

Notification.FLAG_AUTO_CANCEL;     //通知被点击后,自动消失

Notification.FLAG_NO_CLEAR;  //点击'Clear'时,不清楚该通知(QQ的通知无法清除,就是用的这个)

下面附上我做的例子,供大家参考。 里面包括创建通知、更新通知、清除通知、设置自定义铃声、自定义振动、自定义通知视图等。

  

附上代码:

主类:

  1. package com.yfz;
  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.provider.MediaStore.Audio;
  10. import android.util.Log;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.widget.Button;
  14. import android.widget.RemoteViews;
  15. import android.widget.SeekBar;
  16. import android.widget.TextView;
  17. /**
  18. * Notification
  19. * @author Administrator
  20. *
  21. */
  22. public class Lesson_10 extends Activity {
  23. //BaseNotification
  24. private Button bt01;
  25. //UpdateBaseNotification
  26. private Button bt02;
  27. //ClearBaseNotification
  28. private Button bt03;
  29. //MediaNotification
  30. private Button bt04;
  31. //ClearMediaNotification
  32. private Button bt05;
  33. //ClearALL
  34. private Button bt06;
  35. //CustomNotification
  36. private Button bt07;
  37. //通知管理器
  38. private NotificationManager nm;
  39. //通知显示内容
  40. private PendingIntent pd;
  41. @Override
  42. public void onCreate(Bundle savedInstanceState) {
  43. super.onCreate(savedInstanceState);
  44. /*加载页面*/
  45. setContentView(R.layout.lesson10);
  46. init();
  47. }
  48. private void init() {
  49. bt01 = (Button)findViewById(R.id.le10bt01);
  50. bt02 = (Button)findViewById(R.id.le10bt02);
  51. bt03 = (Button)findViewById(R.id.le10bt03);
  52. bt04 = (Button)findViewById(R.id.le10bt04);
  53. bt05 = (Button)findViewById(R.id.le10bt05);
  54. bt06 = (Button)findViewById(R.id.le10bt06);
  55. bt07 = (Button)findViewById(R.id.le10bt07);
  56. bt01.setOnClickListener(onclick);
  57. bt02.setOnClickListener(onclick);
  58. bt03.setOnClickListener(onclick);
  59. bt04.setOnClickListener(onclick);
  60. bt05.setOnClickListener(onclick);
  61. bt06.setOnClickListener(onclick);
  62. bt07.setOnClickListener(onclick);
  63. nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  64. Intent intent = new Intent(this,Lesson_10.class);
  65. pd = PendingIntent.getActivity(Lesson_10.this, 0, intent, 0);
  66. }
  67. OnClickListener onclick = new OnClickListener() {
  68. //BASE Notification ID
  69. private int Notification_ID_BASE = 110;
  70. private Notification baseNF;
  71. //Notification ID
  72. private int Notification_ID_MEDIA = 119;
  73. private Notification mediaNF;
  74. @Override
  75. public void onClick(View v) {
  76. switch(v.getId()) {
  77. case R.id.le10bt01:
  78. //新建状态栏通知
  79. baseNF = new Notification();
  80. //设置通知在状态栏显示的图标
  81. baseNF.icon = R.drawable.icon;
  82. //通知时在状态栏显示的内容
  83. baseNF.tickerText = "You clicked BaseNF!";
  84. //通知的默认参数 DEFAULT_SOUND, DEFAULT_VIBRATE, DEFAULT_LIGHTS.
  85. //如果要全部采用默认值, 用 DEFAULT_ALL.
  86. //此处采用默认声音
  87. baseNF.defaults |= Notification.DEFAULT_SOUND;
  88. baseNF.defaults |= Notification.DEFAULT_VIBRATE;
  89. baseNF.defaults |= Notification.DEFAULT_LIGHTS;
  90. //让声音、振动无限循环,直到用户响应
  91. baseNF.flags |= Notification.FLAG_INSISTENT;
  92. //通知被点击后,自动消失
  93. baseNF.flags |= Notification.FLAG_AUTO_CANCEL;
  94. //点击'Clear'时,不清楚该通知(QQ的通知无法清除,就是用的这个)
  95. baseNF.flags |= Notification.FLAG_NO_CLEAR;
  96. //第二个参数 :下拉状态栏时显示的消息标题 expanded message title
  97. //第三个参数:下拉状态栏时显示的消息内容 expanded message text
  98. //第四个参数:点击该通知时执行页面跳转
  99. baseNF.setLatestEventInfo(Lesson_10.this, "Title01", "Content01", pd);
  100. //发出状态栏通知
  101. //The first parameter is the unique ID for the Notification
  102. // and the second is the Notification object.
  103. nm.notify(Notification_ID_BASE, baseNF);
  104. break;
  105. case R.id.le10bt02:
  106. //更新通知
  107. //比如状态栏提示有一条新短信,还没来得及查看,又来一条新短信的提示。
  108. //此时采用更新原来通知的方式比较。
  109. //(再重新发一个通知也可以,但是这样会造成通知的混乱,而且显示多个通知给用户,对用户也不友好)
  110. baseNF.setLatestEventInfo(Lesson_10.this, "Title02", "Content02", pd);
  111. nm.notify(Notification_ID_BASE, baseNF);
  112. break;
  113. case R.id.le10bt03:
  114. //清除 baseNF
  115. nm.cancel(Notification_ID_BASE);
  116. break;
  117. case R.id.le10bt04:
  118. mediaNF = new Notification();
  119. mediaNF.icon = R.drawable.icon;
  120. mediaNF.tickerText = "You clicked MediaNF!";
  121. //自定义声音
  122. mediaNF.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
  123. //通知时发出的振动
  124. //第一个参数: 振动前等待的时间
  125. //第二个参数: 第一次振动的时长、以此类推
  126. long[] vir = {0,100,200,300};
  127. mediaNF.vibrate = vir;
  128. mediaNF.setLatestEventInfo(Lesson_10.this, "Title03", "Content03", pd);
  129. nm.notify(Notification_ID_MEDIA, mediaNF);
  130. break;
  131. case R.id.le10bt05:
  132. //清除 mediaNF
  133. nm.cancel(Notification_ID_MEDIA);
  134. break;
  135. case R.id.le10bt06:
  136. nm.cancelAll();
  137. break;
  138. case R.id.le10bt07:
  139. //自定义下拉视图,比如下载软件时,显示的进度条。
  140. Notification notification = new Notification();
  141. notification.icon = R.drawable.icon;
  142. notification.tickerText = "Custom!";
  143. RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom);
  144. contentView.setImageViewResource(R.id.image, R.drawable.icon);
  145. contentView.setTextViewText(R.id.text, "Hello, this message is in a custom expanded view");
  146. notification.contentView = contentView;
  147. //使用自定义下拉视图时,不需要再调用setLatestEventInfo()方法
  148. //但是必须定义 contentIntent
  149. notification.contentIntent = pd;
  150. nm.notify(3, notification);
  151. break;
  152. }
  153. }
  154. };
  155. }

主页面:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:orientation="vertical">
  7. <Button
  8. android:id="@+id/le10bt01"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="BaseNotification"
  12. />
  13. <Button
  14. android:id="@+id/le10bt02"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:text="UpdateBaseNotification"
  18. />
  19. <Button
  20. android:id="@+id/le10bt03"
  21. android:layout_width="fill_parent"
  22. android:layout_height="wrap_content"
  23. android:text="ClearBaseNotification"
  24. />
  25. <Button
  26. android:id="@+id/le10bt04"
  27. android:layout_width="fill_parent"
  28. android:layout_height="wrap_content"
  29. android:text="MediaNotification"
  30. />
  31. <Button
  32. android:id="@+id/le10bt05"
  33. android:layout_width="fill_parent"
  34. android:layout_height="wrap_content"
  35. android:text="ClearMediaNotification"
  36. />
  37. <Button
  38. android:id="@+id/le10bt06"
  39. android:layout_width="fill_parent"
  40. android:layout_height="wrap_content"
  41. android:text="ClearALL"
  42. />
  43. <Button
  44. android:id="@+id/le10bt07"
  45. android:layout_width="fill_parent"
  46. android:layout_height="wrap_content"
  47. android:text="CustomNotification"
  48. />
  49. </LinearLayout>

自定义视图页面:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:padding="3dp"
  7. >
  8. <ImageView android:id="@+id/image"
  9. android:layout_width="wrap_content"
  10. android:layout_height="fill_parent"
  11. android:layout_marginRight="10dp"
  12. />
  13. <TextView android:id="@+id/text"
  14. android:layout_width="wrap_content"
  15. android:layout_height="fill_parent"
  16. android:textColor="#000"
  17. />
  18. </LinearLayout>

转载于:https://www.cnblogs.com/webapplee/p/3767792.html

[Android]Notification汇总相关推荐

  1. Android 知识汇总

    转载请注明:http://blog.csdn.net/feather_wch/article/details/52043153 本文用于归纳分类几年Android开发过程中的所有资料. 本文包含主要三 ...

  2. android Notification的使用

    今天,简单讲讲android里如何使Notification. 之前,我讲如何使用服务器进行版本升级时提到了Notification.这个其实我并不常用,所以当时看代码时也是查找了资料,这个很多地方还 ...

  3. Android Notification实现推送消息过程中接受到消息端有声音及震动及亮屏提示

    在Android Notification状态栏通知一文中,简单实现了消息的推送效果,这里就接着上文说一下,当用户接受到消息时的提示效果 // 5-加入震动及声音及亮屏 notification.de ...

  4. Android Notification状态栏通知

    没有增加额外的震动及声音效果,这里直接实现了通知的功能,看效果吧: MainActivity.java package com.example.notification;import android. ...

  5. Android Notification总结

    Android Notification总结 目录[-] 一.通知的主要功能 二.通知简介 三.通知的使用流程 四.使用NotificationCompat.Builder设置通知的属性: 五.管 ...

  6. Android Notification通知详解

    Android Notification通知详解 Notification: (一).简介: 显示在手机状态栏的通知.Notification所代表的是一种具有全局效果的通知,程序一般通过Notifi ...

  7. Android知识点汇总以及常见面试题

    Android知识点汇总以及常见面试题 1. 链表和数组的区别 2. List Hash 数组的区别 3. 用过哪些三方SDK 4. Android四大组件 5. 堆和栈的区别 6. Activity ...

  8. android notification应用之自定义来电通知

    android notification应用之自定义来电通知 1.为了实现老板的各种要求 本人矜矜业业完成任务 随着这个软电话软件的日益完善 本来来电的时候是创建一条通知点亮屏幕 用户可以解锁屏幕后接 ...

  9. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

最新文章

  1. 使用ecshop电子商务系统的100个小问题
  2. php image mask,PHP GD使用一个图像来遮蔽另一个图像,包括透明度
  3. linux 内核发布时间,求问Linux最新内核版本以及发布日期。
  4. srs 服务关闭命令_【经验总结】如何做到网络版工作站与服务器时间同步?
  5. 使用wireshark抓取3G包
  6. selenium + python自动化测试unittest框架学习(一)selenium原理及应用
  7. webapi输出炜json_webapi转化为json格式
  8. 拓端tecdat|R语言Bootstrap的岭回归和自适应LASSO回归可视化
  9. 计算机的典型网络地址 特殊0.0.0.0 本机127.0.0.1 内网192.168.xxx.xxx 172.xxx.xxx.xxx 10.xxx.xxx.xxx 外网
  10. linux vi字体大小,设置VIM字体大小
  11. Unity的渲染管线
  12. windows下远程连接Mysql
  13. 想成为一名黑客怎么办?
  14. 【linux内核分析与应用-陈莉君】物理内存分配与回收机制下
  15. OpenCV参考手册之Mat类详解(二)
  16. 使用WinSCP下载和文件传输教程
  17. MATLAB语音端点检测
  18. 清华大学五道口金融学院2022年博士生(联合培养项目)招生简章
  19. hacking8信息流邀请码第二关 代码详解
  20. CygWin、MinGw和Msys的区别

热门文章

  1. Mybatis中#{}与${}的使用
  2. 获取程序进程并杀死该进程集
  3. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片
  4. Python模块(二)(序列化)
  5. 12、testng.xml指定运行测试包、测试类、测试方法
  6. 修改linux终端的提示字符
  7. 河南城镇化争植“智慧”基因
  8. CSRF 攻击的应对之道
  9. 博客搬家——从CSDN到博客园
  10. 【APP】Linux运维利器--Grep命令及正则表达式