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 在通知栏实现计时功能的更多相关文章

  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. win10 uwp 保存用户选择文件夹

    如果我们每次把临时处理的文件保存,都要让用户选择一次,用户会不会觉得uwp垃圾?如果我们每次打开应用,都从某个文件读取,而这个文件不在应用目录和已知的目录,那么每次都需要用户选择,用户会不会觉得uwp ...

  2. WPF MVVM模式的一些理解

    /*本文转自 http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html */ 使用WPF+Mvvm开发一年多,期间由于对Mvvm模 ...

  3. ASP.NET Web API 2中的错误处理

    前几天在webapi项目中遇到一个问题:Controller构造函数中抛出异常时全局过滤器捕获不到,于是网搜一把写下这篇博客作为总结. HttpResponseException 通常在WebAPI的 ...

  4. 【NOIP2015提高组】 Day1 T2 信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  5. LINUX 笔记-文件隐藏属性

    chmod u+s xxx 设置setuid(4775) chmod g+s xxx 设置gid(2775) chmod o+t xxx 设置stick bit,针对目录(1775)

  6. 限定textbox中只能输入数字的小方法

    在textbox中加入onkeyup="this.value=this.value.replace(/\D/g,' ')"即可实现这一功能 验证数字的正则表达式:^[0-9]*$或 ...

  7. eval函数的坑

    开发工作中遇到这样一种情形,需要执行用户输入的php代码串,于是决定使用eval函数.coding大概示例如下: function getStr($str) { return strlen($str) ...

  8. 爆炸快求1~n有多少素数

    这个求一千亿以内的素数大约用6780ms #include <stdio.h> #include <iostream> #include <string.h> #i ...

  9. Azkaban 2.5.0 搭建和一些小问题

    安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: /usr/local/ae/ankaban JDK 安装目录: export JAVA_HOME=/usr/ ...

  10. js中的浅复制和深复制

    浅复制:浅复制是复制引用,复制后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响 深复制:深复制不是简单的复制引用,而是在堆中重新分配内存,并且把源对象实例的所有属性都进行新建复制,以保证深复 ...