Android 在通知栏实现计时功能
Notification是APP 向系统发出通知时,它将先以图标的形式显示在通知栏中。用户可以下拉通知栏查看通知的详细信息。我们可以在通知栏实现自定义的效果,也可以结合service和BroadCastReceiver实现推送的效果,下面是在通知栏实现计时器的功能。
首先创造NotificationManager 对象:
- NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
然后再创建Builder对象:
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
- .setSmallIcon(R.mipmap.wzzq_logo)
- .setContentTitle("标题:时间提示");
- builder.setOngoing(true);//注:在这里将builder的onGoing设置为true就实现了点击通知栏不会消失,由于我们要实现的是计数器,就要求该通知要一直显示在通知栏上;
再创建PendIntent对象:(在这里创建PendIntent对象的话就能够点击通知栏跳转到制定的activity)
- PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
- new Intent(this, MainActivity.class),
- PendingIntent.FLAG_UPDATE_CURRENT);
然后将builder设置到notificationManager里
- builder.setContentIntent(pendingIntent);
- notificationManager.notify(serviceId,builder.build());
这样,整个的Notification部分就完成了。然而我们要实现的是计时器,计时的效果在哪呢?
我把它放在一个service里面了,通过一个线程实现计时效果。
下面是实现整个效果的service:
- public class NotificationService extends Service {
- private NotificationCompat.Builder builder;
- private NotificationManager notificationManager;
- private int totalSecond;
- private final int serviceId = 0X3;
- @Nullable
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
- builder = new NotificationCompat.Builder(this)
- .setSmallIcon(R.mipmap.wzzq_logo)
- .setContentTitle("标题:时间提示");
- PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
- new Intent(this, MainActivity.class),
- PendingIntent.FLAG_UPDATE_CURRENT);
- builder.setOngoing(true);
- builder.setContentIntent(pendingIntent);
- notificationManager.notify(serviceId,builder.build());
- startForeground(serviceId,builder.build());
- new Thread(new Runnable() {
- @Override
- public void run() {
- for(int i = 0;i<Integer.MAX_VALUE;i++){
- totalSecond = PreferencesUtils.getInt(PatrolTimeNotificationService.this, AppConfig.WZZQ_PATROL_SECONDS, 0);//这里是我从项目里面拿到一个时间进行更新
- if(i > totalSecond + 1){
- return;
- // notificationManager.cancel(0x3);
- }else{
- builder.setContentText(getStringTime(totalSecond));
- notificationManager.notify(serviceId,builder.build());
- }
- try {
- Thread.sleep(1000);//一秒钟更新一次
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- notificationManager.notify(serviceId,builder.build());
- startForeground(serviceId,builder.build());
- }
- }).start();
- return super.onStartCommand(intent, flags, startId);
- }
//这个方法是把int类型的数据转换成时间格式- private String getStringTime(int cnt) {
- int hour = cnt / 3600;
- int min = cnt % 3600 / 60;
- int second = cnt % 60;
- return String.format(Locale.CHINA, "%02d:%02d:%02d", hour, min, second);
- }
- public void stopService(){
- this.stopForeground(true);
- }
- }
最后,在需要用到的地方将service进行启动就好了
- NotificationService notificationService = new NotificationService();
Intent intent = new Intent(mContext,notificationService.getClass());
startService(intent);
这样就实现了在通知栏显示计时器的功能
别忘了 在manifest文件里面注册这个service。
Android 在通知栏实现计时功能的更多相关文章
- Android O 正式版新功能
ref: Android O新特性和行为变更总结zzhttp://www.cnblogs.com/bluestorm/p/7148134.html Android O正式版带来了诸多新功能,如Tens ...
- Unity3D 游戏计时功能实现
最近工作实在是太忙了,没办法认真写博客,但是还是要好好记录下日常的学习. 需求 各类游戏中都大量运用到计时功能,不管是直接显示的在前端UI,还是后台运行. 思路 Unity中提供了Time类可以方便的 ...
- I.MX6 Android 移除 Settings wifi功能
/********************************************************************* * I.MX6 Android 移除 Settings w ...
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...
- Android 实现登录界面和功能实例
近期一个android小程序须要登录功能,我简单实现了一下.如今记录下来也当做个笔记,同一时候也希望能够相互学习.所以,假设我的代码有问题,还各位请提出来.多谢了! 以下.就简述一下此实例的主要内容: ...
- android不知不觉偷拍他人功能实现(手机关闭依然拍照)【申明:来源于网络】
android不知不觉偷拍他人功能实现(手机关闭依然拍照)[申明:来源于网络] 地址:http://blog.csdn.net/huangxiaoguo1/article/details/536660 ...
- 用Eclipse编写Android程序的代码提示功能
用Eclipse编写Android程序的代码提示功能主要是在java和xml文件中,有时候会失效,默认的提示功能有限. 1)java文件自动提示 Window->Preferences- ...
- C/C++/Java 程序计时功能函数
编写程序肯定要使用计时功能,来判断程序的执行时间.今天Google了一下,自己就梳理总结一下: (1)C/C++程序计时 C/C++中使用的计时函数是clock(). C语言中的头文件对应是#incl ...
- 【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)
游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool time ...
随机推荐
- Windows历史
1983年11月:Microsoft宣布Windows的第一个版本:以字符为基础 的窗口系统: 1985年11月:Windows1.0: 1990年5月:Windows 3.0(成功版本),16位OS ...
- 小星星的php
大家好,我是小星星,最近新学的php,我迫不及待要跟大家分享了!!come on!一起来看小星星的世界 先为大家介绍php基础 首先我们来看看什么叫php: PHP(外文名:PHP: Hypertex ...
- IDEA启动后页面没有tomcat server选项,显示灰色问号和红叉不能使用
说明:自己好几次硬盘莫名其妙读不出来导致电脑重启后idea没有了tomcat选项,原来的tomcat上显示灰色的问号和红色小叉子,网上搜了好久加上自己摸索,终于解决了.现在记一下也分享一下,省的下回又 ...
- JAVA描述的简单ORM框架
抽了点时间自己写了个ORM,主要是为了复习JAVA泛型,映射,注解方面的知识.如需代码,可前往:https://github.com/m2492565210/java_orm自行下载 框架的类结构如下 ...
- 学习SVG 重点汇总
什么是SVG? Δ SVG 指可伸缩矢量图形 (Scalable Vector Graphics) Δ SVG 用来定义用于网络的基于矢量的图形 Δ SVG使用XML格式来定义图形 Δ SVG ...
- mybatis 的mapper配置文件sql语句中, 有时用到 大于, 小于等等
一, 用<![CDATA[ ]]>标识,例如: <if test="create_timeStart != null and create_timeStart != ' ...
- 《mysql必知必会》读书笔记--安全管理及数据库维护
安全管理 mysql自带的mysql数据库中的user表可查看用户所有资料 创建用户帐号 CREATE USER ben IDENTIFIED BY 'p@$$wOrd' 重命名用户帐号 RENAME ...
- sessionStorage,UserDataStorage,cookie全兼容写法存在的问题
最近央视播出了中国诗词大赛,看到了一首诗,送给大家 <春宵·春宵一刻值千金> 作者:苏轼 [宋代] 春宵一刻值千金,花有清香月有阴. 歌管楼台声细细,秋千院落夜沉沉. 好了,言归正传,今天 ...
- Leetcode题解(21)
62. Unique Paths 题目 分析: 机器人一共要走m+n-2步,现在举个例子类比,有一个m+n-2位的二进制数,现在要在其中的m位填0,其余各位填1,一共有C(m+n-2,m-1)种可能, ...
- node多版本管理--nvmw
最近要搭建koa2+node环境,发现需要node较高版本,不然ES6.7中的语法使用不了.就像安装多个版本的node,发现了nvmw. 1.下载nvmw https://github.com/ha ...