Notification是APP 向系统发出通知时,它将先以图标的形式显示在通知栏中。用户可以下拉通知栏查看通知的详细信息。我们可以在通知栏实现自定义的效果,也可以结合service和BroadCastReceiver实现推送的效果,下面是在通知栏实现计时器的功能。

首先创造NotificationManager 对象:

  1. NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

  然后再创建Builder对象:

  1. NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
  2. .setSmallIcon(R.mipmap.wzzq_logo)
  3. .setContentTitle("标题:时间提示");
  1. builder.setOngoing(true);//注:在这里将builder的onGoing设置为true就实现了点击通知栏不会消失,由于我们要实现的是计数器,就要求该通知要一直显示在通知栏上;

  再创建PendIntent对象:(在这里创建PendIntent对象的话就能够点击通知栏跳转到制定的activity)

  1. PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
  2. new Intent(this, MainActivity.class),
  3. PendingIntent.FLAG_UPDATE_CURRENT);

  然后将builder设置到notificationManager里

  1. builder.setContentIntent(pendingIntent);
  2. notificationManager.notify(serviceId,builder.build());

  这样,整个的Notification部分就完成了。然而我们要实现的是计时器,计时的效果在哪呢?

我把它放在一个service里面了,通过一个线程实现计时效果。

下面是实现整个效果的service:

  1. public class NotificationService extends Service {
  2. private NotificationCompat.Builder builder;
  3. private NotificationManager notificationManager;
  4. private int totalSecond;
  5. private final int serviceId = 0X3;
  6.  
  7. @Nullable
  8. @Override
  9. public IBinder onBind(Intent intent) {
  10. return null;
  11. }
  12.  
  13. @Override
  14. public int onStartCommand(Intent intent, int flags, int startId) {
  15. notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
  16. builder = new NotificationCompat.Builder(this)
  17. .setSmallIcon(R.mipmap.wzzq_logo)
  18. .setContentTitle("标题:时间提示");
  19. PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
  20. new Intent(this, MainActivity.class),
  21. PendingIntent.FLAG_UPDATE_CURRENT);
  22. builder.setOngoing(true);
  23. builder.setContentIntent(pendingIntent);
  24. notificationManager.notify(serviceId,builder.build());
  25. startForeground(serviceId,builder.build());
  26. new Thread(new Runnable() {
  27. @Override
  28. public void run() {
  29. for(int i = 0;i<Integer.MAX_VALUE;i++){
  30. totalSecond = PreferencesUtils.getInt(PatrolTimeNotificationService.this, AppConfig.WZZQ_PATROL_SECONDS, 0);//这里是我从项目里面拿到一个时间进行更新
                
  31. if(i > totalSecond + 1){
  32. return;
  33. // notificationManager.cancel(0x3);
  34. }else{
  35. builder.setContentText(getStringTime(totalSecond));
  36. notificationManager.notify(serviceId,builder.build());
  37. }
  38. try {
  39. Thread.sleep(1000);//一秒钟更新一次
  40. } catch (InterruptedException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. notificationManager.notify(serviceId,builder.build());
  45. startForeground(serviceId,builder.build());
  46. }
  47. }).start();
  48. return super.onStartCommand(intent, flags, startId);
  49. }

  50. //这个方法是把int类型的数据转换成时间格式
  51. private String getStringTime(int cnt) {
  52. int hour = cnt / 3600;
  53. int min = cnt % 3600 / 60;
  54. int second = cnt % 60;
  55. return String.format(Locale.CHINA, "%02d:%02d:%02d", hour, min, second);
  56. }
  57.  
  58. public void stopService(){
  59. this.stopForeground(true);
  60. }
  61.  
  62. }

  

最后,在需要用到的地方将service进行启动就好了

  1. NotificationService notificationService = new NotificationService();
    Intent intent = new Intent(mContext,notificationService.getClass());
    startService(intent);
     

这样就实现了在通知栏显示计时器的功能

别忘了 在manifest文件里面注册这个service。

Android 在通知栏实现计时功能的更多相关文章

  1. Android O 正式版新功能

    ref: Android O新特性和行为变更总结zzhttp://www.cnblogs.com/bluestorm/p/7148134.html Android O正式版带来了诸多新功能,如Tens ...

  2. Unity3D 游戏计时功能实现

    最近工作实在是太忙了,没办法认真写博客,但是还是要好好记录下日常的学习. 需求 各类游戏中都大量运用到计时功能,不管是直接显示的在前端UI,还是后台运行. 思路 Unity中提供了Time类可以方便的 ...

  3. I.MX6 Android 移除 Settings wifi功能

    /********************************************************************* * I.MX6 Android 移除 Settings w ...

  4. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  5. Android 实现登录界面和功能实例

    近期一个android小程序须要登录功能,我简单实现了一下.如今记录下来也当做个笔记,同一时候也希望能够相互学习.所以,假设我的代码有问题,还各位请提出来.多谢了! 以下.就简述一下此实例的主要内容: ...

  6. android不知不觉偷拍他人功能实现(手机关闭依然拍照)【申明:来源于网络】

    android不知不觉偷拍他人功能实现(手机关闭依然拍照)[申明:来源于网络] 地址:http://blog.csdn.net/huangxiaoguo1/article/details/536660 ...

  7. 用Eclipse编写Android程序的代码提示功能

    用Eclipse编写Android程序的代码提示功能主要是在java和xml文件中,有时候会失效,默认的提示功能有限. 1)java文件自动提示     Window->Preferences- ...

  8. C/C++/Java 程序计时功能函数

    编写程序肯定要使用计时功能,来判断程序的执行时间.今天Google了一下,自己就梳理总结一下: (1)C/C++程序计时 C/C++中使用的计时函数是clock(). C语言中的头文件对应是#incl ...

  9. 【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)

    游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool time ...

随机推荐

  1. Windows历史

    1983年11月:Microsoft宣布Windows的第一个版本:以字符为基础 的窗口系统: 1985年11月:Windows1.0: 1990年5月:Windows 3.0(成功版本),16位OS ...

  2. 小星星的php

    大家好,我是小星星,最近新学的php,我迫不及待要跟大家分享了!!come on!一起来看小星星的世界 先为大家介绍php基础 首先我们来看看什么叫php: PHP(外文名:PHP: Hypertex ...

  3. IDEA启动后页面没有tomcat server选项,显示灰色问号和红叉不能使用

    说明:自己好几次硬盘莫名其妙读不出来导致电脑重启后idea没有了tomcat选项,原来的tomcat上显示灰色的问号和红色小叉子,网上搜了好久加上自己摸索,终于解决了.现在记一下也分享一下,省的下回又 ...

  4. JAVA描述的简单ORM框架

    抽了点时间自己写了个ORM,主要是为了复习JAVA泛型,映射,注解方面的知识.如需代码,可前往:https://github.com/m2492565210/java_orm自行下载 框架的类结构如下 ...

  5. 学习SVG 重点汇总

    什么是SVG? Δ  SVG 指可伸缩矢量图形 (Scalable Vector Graphics) Δ  SVG 用来定义用于网络的基于矢量的图形 Δ  SVG使用XML格式来定义图形 Δ  SVG ...

  6. mybatis 的mapper配置文件sql语句中, 有时用到 大于, 小于等等

    一, 用<![CDATA[   ]]>标识,例如: <if test="create_timeStart != null and create_timeStart != ' ...

  7. 《mysql必知必会》读书笔记--安全管理及数据库维护

    安全管理 mysql自带的mysql数据库中的user表可查看用户所有资料 创建用户帐号 CREATE USER ben IDENTIFIED BY 'p@$$wOrd' 重命名用户帐号 RENAME ...

  8. sessionStorage,UserDataStorage,cookie全兼容写法存在的问题

    最近央视播出了中国诗词大赛,看到了一首诗,送给大家 <春宵·春宵一刻值千金> 作者:苏轼 [宋代] 春宵一刻值千金,花有清香月有阴. 歌管楼台声细细,秋千院落夜沉沉. 好了,言归正传,今天 ...

  9. Leetcode题解(21)

    62. Unique Paths 题目 分析: 机器人一共要走m+n-2步,现在举个例子类比,有一个m+n-2位的二进制数,现在要在其中的m位填0,其余各位填1,一共有C(m+n-2,m-1)种可能, ...

  10. node多版本管理--nvmw

    最近要搭建koa2+node环境,发现需要node较高版本,不然ES6.7中的语法使用不了.就像安装多个版本的node,发现了nvmw. 1.下载nvmw  https://github.com/ha ...