通知(Notification)是安卓系统特色的功能,当某个程序在后台运行希望向用户发送一个信息是,便可用通知来实现,手机的状态栏会显示一个通知的图标。

1.基本用法

首先使用Context的getSystemService()方法获得NotificationManager来对通知进行管理,如下:

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

然后使用Builder构造器来构造一个Notification对象,可用多个方法来丰富Notification对象。

    Notification notification=new NotifucationCompat.Builder(context)
.setContentTitle("title")
.setContentText("text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.small_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.large_icon)).build(),

第1-5分别设置的是标题、内容、显示的时间、小图标、大图标下拉系统状态栏的时候就能看到大图标了。
之后就可以调用NotificationManager的notify()方法让通知显示出来:

manager.notify(1,notification);

第一个参数是Id要保证每一个通知的Id都是不同的。第二个则是通知的对象。
要想状态栏发出的通知点击之后有相应的效果,需要用PendingIntent来实现,指明某个意图,可用于启动活动,启动服务以及发送广播,主要提供了几个静态的方法
getActivity(),getBroadcast(),getService()
都是4个参数,第一个是context,第二个一般用不到写0,第三个参数是一个Intent对象,可以通过这个对象构建出PendingIntent的意图。第四个参数用于确定PendingIntent的行为,有
FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT四个值可以选,含义可参考文档,一般写0即可。
NotificationCompat.Builder有一个setContentIntent()的方法,接收的参数正式一个PendingIntent对象。
给通知加上点击的功能可用下面来实现:

public void onClick(View v){switch (v.getId()){case R.id.send_notice:Intent intent=new Intent(this,NotificationActivity.class);PendingIntent pi=PendingIntent.getActivity(this,0,intent,0);NotificationManager manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);Notification notification =new NotificationCompat.Builder(this).setContentTitle("this is content title").setContentText("this is content text").setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)).setContentIntent(pi).setAutoCancel(true).setPriority(NotificationCompat.PRIORITY_MAX).build();manager.notify(1,notification);break;default:break;}

让状态栏的通知消失有两种办法:1。setAutoCancel(true) 2。写法如下:

public class NotificationActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.notification_layout);NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);manager.cancel(1);}
}

cacel()中的参数与通知的id对应。

2.通知的进阶技巧

NotificationCompat.Builder提供了丰富的API.

通知的时候播放一段音频

.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))

通知让手机振动

.setVibrate(new long[]){0,1000,1000,1000}

一个数组用于设置静止和振动的时长,下标为0(偶数)的值表示静止的时长,下标为1(奇数)的值表示振动的时长
振动需要在 AndroidManifest.xml中声明权限

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

控制LED灯的显示

.setLights(Color.GREEN,1000,1000)

参数为:颜色,亮的时长,暗的时长

通知的默认效果
如果不想进项那么多复杂的设置可以使用通知的默认效果,设置方法如下:

.setDefaults(NotificationCompat.DEFAULT_ALL)

3.通知的高级功能

setStyle()
用来构建富文本的通知的内容,也就是通知不仅仅可以包含文字和图标,还可以包含更多的东西,setStyle()方法接收一个NotificationCompat.Style参数,用来构建具体的富文本信息如:长文字,图片。
直接使用:

.setContentText("长文字")

会导致文字不能完全显示,以省略号表示多余的部分,可以用.setStyle():

.setStyle(new NotificationCompat.BigTextStyle.bigText("长文字"))

用NotificationCompat.BigTextStyle对象来封装长文字,在用bigText方法将文字穿进去,
类似的方法可以限制大图

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.big_image)))

.setPriority()

.setPriority(NotificationCompat.PRIORITY_MAX)

设置优先级,由低到高有五个值可以选:
PRIORITY_DEFAULT
PRIORITY_MIN
PRIORITY_LOW
PRIORITY_HIGH
PRIORITY_MAX
把级别设置成最高级别的通知在状态栏显示的不是提分小图标,而是一个横幅

Android学习-通知的使用详解相关推荐

  1. 【Android -- 学习笔记】ListView 详解

    直接继承自 AbsListView,AbsListView 继承自 AdapterView,AdapterView 又继承自 ViewGroup. Adpater 在 ListView 和数据源之间起 ...

  2. 《Android Studio应用开发实战详解》——第1章,第1.5节Android开发学习路线图

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.5节Android开发学习路线图,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区& ...

  3. Android基础总结: Camera2详解之一 API学习

    Camera2的API出来有些年头了,只是赶项目多次使用,没时间好好总结,年终了,正好结合google的官方Camera2demo 和开发中使用的情况,做个详细梳理,研究总结之后,才发现Camera2 ...

  4. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

  5. Android网络开发技术实战详解

    <Android网络开发技术实战详解> 基本信息 作者: 朱桂英 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121173493 上架时间:2012 ...

  6. Android Telephony分析(五) ---- TelephonyRegistry详解

    本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节.  从TelephonyRegistry的大部分方法中:  ...

  7. Android Telephony分析(二) ---- RegistrantList详解

    前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.  在Telephony模块中,在RIL.Tracker(ServiceStateTr ...

  8. Android Loader 异步加载详解一:基础概念

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70241844 本文出自[赵彦军的博客] Android Loader 异步加载详解 ...

  9. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高...

    第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...

最新文章

  1. 死磕Java并发:J.U.C之AQS简介
  2. php 导出word 高度,PHP导出word
  3. python 读取 Excel 文件的方法 csv.reader
  4. feedburner怎么用_FeedBurner PRO 現在免費使用
  5. servlet3.0注解loadOnStartup不起作用解决方案
  6. 苹果cms安装 php映射,苹果cmsV10安装过程中的常见问题处理办法
  7. cacti监控 磁盘I/O
  8. uva 540 (Team Queue UVA - 540)
  9. Pig、Hive、MapReduce 解决分组 Top K 问题
  10. 个税改革怎么改?媒体称年收入超12万者税负或增加
  11. 【Verilog语法简介】
  12. Dmoz中文目录收录的中文博客
  13. html怎么让视频自动循环播放,【前端】div 加载视频并自动循环播放
  14. 清华梦的粉碎-写给清华大学的退学申请
  15. 电子皮肤综述阅读-鲍哲南-2019
  16. 下肢外骨骼机器人开发技术综述
  17. Odoo owl 学习笔记之13—event_handing
  18. Matlab之inv函数
  19. js 正则 验证密码输入,必须为6-15位,含有数字字母,或者符号
  20. 异常信息:由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults

热门文章

  1. 华为:求生存是当前主线 下阶段重点 to B数字化
  2. 试论我国农村剩余劳动力的转移
  3. 常用的内存泄漏检查工具
  4. 产品如何定价?别进误区
  5. 三大数据分析工具对比 - 友盟 GrowingIO 神策数据
  6. 海信电视power android,海信智能电视投屏之安卓手机miracast投屏教程
  7. dp,dpi,px知识补充
  8. 前端学习-关于选择器的介绍和使用
  9. Python多路IO复用之select
  10. caffe SSD 代码编译运行流程及问题解决