SystemUI上的时间显示只要就在/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java类上

效果图

这个类也很简单,监听处理广播

@Override

protected void onAttachedToWindow() {

super.onAttachedToWindow();

if (!mAttached) {

mAttached = true;

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_TIME_TICK);

filter.addAction(Intent.ACTION_TIME_CHANGED);

filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);

filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);

filter.addAction(Intent.ACTION_USER_SWITCHED);

getContext().registerReceiver(mIntentReceiver, filter, null,

getHandler());

}

// NOTE: It's safe to do these after registering the receiver since the

// receiver always runs

// in the main thread, therefore the receiver can't run before this

// method returns.

// The time zone may have changed while the receiver wasn't registered,

// so update the Time

mCalendar = Calendar.getInstance(TimeZone.getDefault());

// Make sure we update to the current time

updateClock();

}

@Override

protected void onDetachedFromWindow() {

super.onDetachedFromWindow();

if (mAttached) {

getContext().unregisterReceiver(mIntentReceiver);

mAttached = false;

}

}在广播中去更新时间和监听语言是否有改变

private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

Log.d(TAG, "action =" + action);

if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {

String tz = intent.getStringExtra("time-zone");

mCalendar = Calendar.getInstance(TimeZone.getTimeZone(tz));

if (mClockFormat != null) {

mClockFormat.setTimeZone(mCalendar.getTimeZone());

}

Log.d(TAG,

"mCalendar =" + mCalendar

+ "TimeZone.getTimeZone(tz) ="

+ TimeZone.getTimeZone(tz));

} else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {

final Locale newLocale = getResources().getConfiguration().locale;

if (!newLocale.equals(mLocale)) {

mLocale = newLocale;

mClockFormatString = ""; // force refresh

}

}

updateClock();

}

};在设置中可以改变时间显示是以12小时还是24小时

时间的格式合成都是在这个函数中完成

private final CharSequence getSmallTime() {

Context context = getContext();

boolean is24 = DateFormat.is24HourFormat(context);

LocaleData d = LocaleData

.get(context.getResources().getConfiguration().locale);

final char MAGIC1 = '\uEF00';

final char MAGIC2 = '\uEF01';

SimpleDateFormat sdf;

String format = is24 ? d.timeFormat24 : d.timeFormat12;

if (!format.equals(mClockFormatString)) {

/*

* Search for an unquoted "a" in the format string, so we can add

* dummy characters around it to let us find it again after

* formatting and change its size.

*/

if (AM_PM_STYLE != AM_PM_STYLE_NORMAL) {

int a = -1;

boolean quoted = false;

for (int i = 0; i < format.length(); i++) {

char c = format.charAt(i);

if (c == '\'') {

quoted = !quoted;

}

if (!quoted && c == 'a') {

a = i;

break;

}

}

if (a >= 0) {

// Move a back so any whitespace before AM/PM is also in the

// alternate size.

final int b = a;

while (a > 0

&& Character.isWhitespace(format.charAt(a - 1))) {

a--;

}

format = format.substring(0, a) + MAGIC1

+ format.substring(a, b) + "a" + MAGIC2

+ format.substring(b + 1);

}

}

mClockFormat = sdf = new SimpleDateFormat(format);

mClockFormatString = format;

} else {

sdf = mClockFormat;

}

String result = sdf.format(mCalendar.getTime());

if (AM_PM_STYLE != AM_PM_STYLE_NORMAL) {

int magic1 = result.indexOf(MAGIC1);

int magic2 = result.indexOf(MAGIC2);

if (magic1 >= 0 && magic2 > magic1) {

SpannableStringBuilder formatted = new SpannableStringBuilder(

result);

if (AM_PM_STYLE == AM_PM_STYLE_GONE) {

formatted.delete(magic1, magic2 + 1);

} else {

if (AM_PM_STYLE == AM_PM_STYLE_SMALL) {

CharacterStyle style = new RelativeSizeSpan(0.7f);

formatted.setSpan(style, magic1, magic2,

Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

}

formatted.delete(magic2, magic2 + 1);

formatted.delete(magic1, magic1 + 1);

}

return formatted;

}

}

return result;

}

android 监听时钟变化,Android4.4 SystemUI分析之Clock时钟显示相关推荐

  1. android 监听图库变化,Android ContentObserver 监听图库变化

    电脑环境是XP,软件是gVim7.3,安装在C盘的 Program Files 下.如何设置gVim的字体和背景颜色:C---Program Files---Vim---_vimrc文件,用文本编辑器 ...

  2. 深入分析Android监听网络变化的坑

    Android开发的同学都知道,在很多场景下我们需要监听网络变化,从而做一些业务逻辑比如刷新数据.于是我们会找到这样一个广播:ConnectivityManager.CONNECTIVITY_ACTI ...

  3. android 监听界面变化,Android之页面有变化用onWindowFocusChanged来监听权限是否开启...

    1 问题 我们需要在Activity里面监听网络变化.热点是否开启和关闭.GPS服务是否开启.位置权限是否开启等一些列行为. 2 思路 方法一: 如果是需要启动activity进行权限申请,我们可以用 ...

  4. android监控指纹信息变化,android监听指纹变化(解决反射思路在android10不生效的问题)...

    前天偶尔运行代码,一个段异常映入眼帘,我擦android10上反射机制监听不到指纹id等数据了,原因是android10彻底抛弃了之前指纹的api.所以反射不到了. 怎么解决这个问题?我们换个思路当然 ...

  5. Android 监听网络变化弹出提示窗口

    项目有这个需求,监听如果网络断开后3秒内如果没有恢复则弹出网络异常的页面.于是在度娘找了些资料自己写了一个.现在分享一下出现的问题以及解决方法. 1.查到要监听网络需要使用广播接收者.于是摘了一段网上 ...

  6. android 监听手机电量变化

    今天,简单讲讲如何监听手机电量的变化. 监听电量是不能静态注册的. 后来上网搜索,发现有五个不能静态注册的广播,这里记录一下,免得下次再后知后觉的发现并惊讶于自己的笨拙. 不能静态注册的广播: and ...

  7. Android 第十九课 大喇叭--广播机制----动态注册监听网络变化与静态注册实现开机启动

    为了便于进行 系统级别的消息通知,Android引入了一套广播消息机制. 1.广播机制简介: 因为Android中的每个应用程序都可以对自己感兴趣的广播尽心注册,这样程序只会接收自己所关心的广播内容, ...

  8. Android监听手机网络变化

    Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 <?xml version="1.0" encodi ...

  9. Android 监听系统语言变化

    ** 监听系统语言变化 ** 监听系统语言变化 首先先创建一个MyApplication继承Application public class MyApplication extends Applica ...

最新文章

  1. 基于OpenCV的特定区域提取
  2. vue全家桶+Koa2开发笔记(2)--koa2
  3. 乐源机器人没电提醒吗_我每天费尽心思,就为了逗一个机器人开心。。
  4. 使用kubernetes的deployment进行RollingUpdate
  5. 蓝桥杯_算法训练_关联矩阵
  6. reactjs生命周期回调(钩子)函数:componentDidMount componentWillUnmount
  7. java虚拟机的俩种异常
  8. lombok 自动使用_Lombok,自动值和不可变项
  9. Jmeter BeanShell学习(一) - BeanShell取样器(一)
  10. java8-Optional
  11. 微信收费事件背后被广泛忽略的技术细节
  12. Uva 10817 校长的烦恼
  13. 2018-2019-1 20165302 《信息安全系统设计基础》第三周学习总结
  14. (转) SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程
  15. 莫烦Python机器学习
  16. QT 使用全局钩子监听鼠标事件和键盘事件
  17. 笔记本电脑怎么设置wifi热点共享
  18. 必须来GeekPwn的十大理由
  19. Placement blockage types
  20. BMM 和 FMM 中文分词

热门文章

  1. sklearn onehot
  2. xp系统怎么弄清微软服务器名称,xp系统电脑怎么远程云服务器
  3. python异步写文件_结合异步http请求将数据写入文件
  4. Leetcode 23 合并k个升序链表 (每日一题 20210722)
  5. html调试和js脚本调试
  6. 深度学习应用实战案例-员工流失预测模型(Python源代码)
  7. 深度学习核心技术精讲100篇(四十四)-深度召回在招聘推荐中的挑战和实践
  8. MATLAB实战系列(五)-模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解
  9. 成为指标的“绝地武士”:tableau创建指标的 10 个技巧和窍门
  10. 深度学习核心技术精讲100篇(十六)-搜索引擎Indri系列之如何建立索引 (Indexing)检索评价 (Evaluation)