- 浏览: 286796 次
- 性别:
- 来自: 荷兰
文章分类
最新评论
-
ice.k:
才发现,谢谢。
使用CXF框架提供Rest接口的一些设置 -
kucoll:
@Produces 是控制响应的content-type,如果 ...
使用CXF框架提供Rest接口的一些设置 -
SE_XiaoFeng:
写的好.讲出了原因,和解决办法,这才是锦囊妙计.
Android 中的ANR 问题,响应灵敏性 -
zhujinyuan:
怎么没有代码的额。
10个经典的Android开源项目 -
liuxuejin:
我回去试试好
ubuntu安装Mac OS X主题
http://blog.csdn.net/absurd/archive/2011/01/09/6125588.aspx
在 Android的系统设置中,有自动同步网络时间的选项。因为Broncho A1移植到froyo版本之后,我们发现时间同步选项无效了。所以我花了一点时间去研究 Android的网络时间同步的流程。研究的结果让我感到惊讶,Android的网络时间同步居然与SNTP协议无关,甚至与TCP/IP协议也毫无关系。
从设置的应用程序中可以了解到,自动同步网络时间的选项只是修改了Settings.System.AUTO_TIME这个设置:
private void setAutoState(boolean isEnabled, boolean autotimeStatus) {
if (isEnabled == false) {
mAutoPref.setChecked(autotimeStatus);
mAutoPref.setEnabled(isEnabled);
}
else {
Settings.System.putInt(getContentResolver(),
Settings.System.AUTO_TIME, autotimeStatus ? 1 : 0);
}
mTimePref.setEnabled(!autotimeStatus);
mDatePref.setEnabled(!autotimeStatus);
mTimeZone.setEnabled(!autotimeStatus);
}
谁会用这个设置呢?然后从代码中查找Settings.System.AUTO_TIME,主要有下面两处:
telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
GSM和CDMA的实现应该是类似的,这里只是看看GSM: 1. reference-ril/reference-ril.c处理主动上报消息。
if (strStartsWith(s, "%CTZV:")) {
/* TI specific -- NITZ time */
char *response;
line = p = strdup(s);
at_tok_start(&p);
err = at_tok_nextstr(&p, &response);
free(line);
if (err != 0) {
LOGE("invalid NITZ line %s\n", s);
} else {
RIL_onUnsolicitedResponse (
RIL_UNSOL_NITZ_TIME_RECEIVED,
response, strlen(response));
}
}
这里是处理模组主动上报的消息,如果是时间和时区消息,则调用RIL_onUnsolicitedResponse。
2. RIL_onUnsolicitedResponse会把消息发送给RIL的客户端。
ret = sendResponse(p, client_id);
时间和时区信息的格式在RIL_UNSOL_NITZ_TIME_RECEIVED消息的定义处有说明:
"data" is const char * pointing to NITZ time string in the form "yy/mm/dd,hh:mm:ss(+/-)tz,dt"
3. RIL客户端处理RIL_UNSOL_NITZ_TIME_RECEIVED消息(telephony/java/com/android/internal/telephony/RIL.java: processUnsolicited)
case RIL_UNSOL_NITZ_TIME_RECEIVED:
if (RILJ_LOGD) unsljLogRet(response, ret);
// has bonus long containing milliseconds since boot that the NITZ
// time was received
long nitzReceiveTime = p.readLong();
Object[] result = new Object[2];
result[0] = ret;
result[1] = Long.valueOf(nitzReceiveTime);
if (mNITZTimeRegistrant != null) {
mNITZTimeRegistrant
.notifyRegistrant(new AsyncResult (null, result, null));
} else {
// in case NITZ time registrant isnt registered yet
mLastNITZTimeInfo = result;
}
是GsmServiceStateTracker向RIL注册的,所以事件会由GsmServiceStateTracker来处理。
4. GsmServiceStateTracker 处理EVENT_NITZ_TIME事件:
case EVENT_NITZ_TIME:
ar = (AsyncResult) msg.obj;
String nitzString = (String)((Object[])ar.result)[0];
long nitzReceiveTime = ((Long)((Object[])ar.result)[1]).longValue();
setTimeFromNITZString(nitzString, nitzReceiveTime);
break;
这里nitzString是时间字符串,由setTimeFromNITZString负责解析。
private void setTimeFromNITZString (String nitz, long nitzReceiveTime) {
String[] nitzSubs = nitz.split("[/:,+-]");
int year = 2000 + Integer.parseInt(nitzSubs[0]);
c.set(Calendar.YEAR, year);
// month is 0 based!
int month = Integer.parseInt(nitzSubs[1]) - 1;
c.set(Calendar.MONTH, month);
int date = Integer.parseInt(nitzSubs[2]);
c.set(Calendar.DATE, date);
int hour = Integer.parseInt(nitzSubs[3]);
c.set(Calendar.HOUR, hour);
int minute = Integer.parseInt(nitzSubs[4]);
c.set(Calendar.MINUTE, minute);
如果在系统设置中,用户选择了自动同步网络时间,才会去设置系统时间。
if (getAutoTime()) {
setAndBroadcastNetworkSetTimeZone(zone.getID());
}
if (getAutoTime()) {
setAndBroadcastNetworkSetTime(c.getTimeInMillis());
}
关于NITZ在WIKI上有说明:
NITZ, or Network Identity and Time Zone[1], is a mechanism for provisioning local time and date, as well as network provider identity information to mobile devices via a wireless network[2]. NITZ has been part of the official GSM standard since phase 2+ release 96[3]. NITZ is often used to automatically update the system clock of mobile phones.
由于NITZ的实现是可选的,如果运营商不支持它,Android手机就无法使用此功能了。此时用最好用SNTP来代替,否则用户会感到迷惑。但Android
在 Android的系统设置中,有自动同步网络时间的选项。因为Broncho A1移植到froyo版本之后,我们发现时间同步选项无效了。所以我花了一点时间去研究 Android的网络时间同步的流程。研究的结果让我感到惊讶,Android的网络时间同步居然与SNTP协议无关,甚至与TCP/IP协议也毫无关系。
从设置的应用程序中可以了解到,自动同步网络时间的选项只是修改了Settings.System.AUTO_TIME这个设置:
private void setAutoState(boolean isEnabled, boolean autotimeStatus) {
if (isEnabled == false) {
mAutoPref.setChecked(autotimeStatus);
mAutoPref.setEnabled(isEnabled);
}
else {
Settings.System.putInt(getContentResolver(),
Settings.System.AUTO_TIME, autotimeStatus ? 1 : 0);
}
mTimePref.setEnabled(!autotimeStatus);
mDatePref.setEnabled(!autotimeStatus);
mTimeZone.setEnabled(!autotimeStatus);
}
谁会用这个设置呢?然后从代码中查找Settings.System.AUTO_TIME,主要有下面两处:
telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
GSM和CDMA的实现应该是类似的,这里只是看看GSM: 1. reference-ril/reference-ril.c处理主动上报消息。
if (strStartsWith(s, "%CTZV:")) {
/* TI specific -- NITZ time */
char *response;
line = p = strdup(s);
at_tok_start(&p);
err = at_tok_nextstr(&p, &response);
free(line);
if (err != 0) {
LOGE("invalid NITZ line %s\n", s);
} else {
RIL_onUnsolicitedResponse (
RIL_UNSOL_NITZ_TIME_RECEIVED,
response, strlen(response));
}
}
这里是处理模组主动上报的消息,如果是时间和时区消息,则调用RIL_onUnsolicitedResponse。
2. RIL_onUnsolicitedResponse会把消息发送给RIL的客户端。
ret = sendResponse(p, client_id);
时间和时区信息的格式在RIL_UNSOL_NITZ_TIME_RECEIVED消息的定义处有说明:
"data" is const char * pointing to NITZ time string in the form "yy/mm/dd,hh:mm:ss(+/-)tz,dt"
3. RIL客户端处理RIL_UNSOL_NITZ_TIME_RECEIVED消息(telephony/java/com/android/internal/telephony/RIL.java: processUnsolicited)
case RIL_UNSOL_NITZ_TIME_RECEIVED:
if (RILJ_LOGD) unsljLogRet(response, ret);
// has bonus long containing milliseconds since boot that the NITZ
// time was received
long nitzReceiveTime = p.readLong();
Object[] result = new Object[2];
result[0] = ret;
result[1] = Long.valueOf(nitzReceiveTime);
if (mNITZTimeRegistrant != null) {
mNITZTimeRegistrant
.notifyRegistrant(new AsyncResult (null, result, null));
} else {
// in case NITZ time registrant isnt registered yet
mLastNITZTimeInfo = result;
}
是GsmServiceStateTracker向RIL注册的,所以事件会由GsmServiceStateTracker来处理。
4. GsmServiceStateTracker 处理EVENT_NITZ_TIME事件:
case EVENT_NITZ_TIME:
ar = (AsyncResult) msg.obj;
String nitzString = (String)((Object[])ar.result)[0];
long nitzReceiveTime = ((Long)((Object[])ar.result)[1]).longValue();
setTimeFromNITZString(nitzString, nitzReceiveTime);
break;
这里nitzString是时间字符串,由setTimeFromNITZString负责解析。
private void setTimeFromNITZString (String nitz, long nitzReceiveTime) {
String[] nitzSubs = nitz.split("[/:,+-]");
int year = 2000 + Integer.parseInt(nitzSubs[0]);
c.set(Calendar.YEAR, year);
// month is 0 based!
int month = Integer.parseInt(nitzSubs[1]) - 1;
c.set(Calendar.MONTH, month);
int date = Integer.parseInt(nitzSubs[2]);
c.set(Calendar.DATE, date);
int hour = Integer.parseInt(nitzSubs[3]);
c.set(Calendar.HOUR, hour);
int minute = Integer.parseInt(nitzSubs[4]);
c.set(Calendar.MINUTE, minute);
如果在系统设置中,用户选择了自动同步网络时间,才会去设置系统时间。
if (getAutoTime()) {
setAndBroadcastNetworkSetTimeZone(zone.getID());
}
if (getAutoTime()) {
setAndBroadcastNetworkSetTime(c.getTimeInMillis());
}
关于NITZ在WIKI上有说明:
NITZ, or Network Identity and Time Zone[1], is a mechanism for provisioning local time and date, as well as network provider identity information to mobile devices via a wireless network[2]. NITZ has been part of the official GSM standard since phase 2+ release 96[3]. NITZ is often used to automatically update the system clock of mobile phones.
由于NITZ的实现是可选的,如果运营商不支持它,Android手机就无法使用此功能了。此时用最好用SNTP来代替,否则用户会感到迷惑。但Android
发表评论
-
DLNA」的介紹與應用
2012-07-18 11:19 2226還記得先前我們曾經介紹過的《多功能搖控器的應用》嗎?它是 ... -
10个经典的Android开源项目
2012-03-29 11:20 1527http://www.eoeandroid.com ... -
ubuntu下设置Android手机驱动
2012-02-20 12:12 4619原文:http://blog.csdn.net/flow ... -
通过网络使用ADB ( Connect to android with ADB over TCP )
2011-11-08 12:59 24421来自:http://lesca.me/blog/2011 ... -
Ubuntu 11.04 64位 编译 Android 2.3 源码
2011-09-17 17:41 4511首先,我建立了JNI的编译开发环境。 用VM安装Ubun ... -
浅谈Android系统的图标设计规范
2011-07-15 10:11 1990目前移动平台的竞争日益激烈,友好的用户界面可以帮助提高用户 ... -
DownloadProvider
2011-06-15 20:17 1069DownloadProvider -
android下载编译以及文件系统提取总结
2011-06-14 20:44 1631原文地址:http://bbs.android ... -
应用程序签名
2011-05-25 16:48 1036这篇文章将阐述在应用 ... -
OPhone平台aidl文件不一致导致的问题及解决
2011-05-25 13:05 1198http://www.ophonesdn.com/articl ... -
Android 利用隐藏API实现屏幕亮度调节
2011-05-14 21:02 3603Android 实现屏幕亮度调节 脚盆原创,转载请注明出处。 ... -
获取Android设备的唯一识别码|设备号|序号|UUID
2011-05-05 10:25 4152如何获取一个能唯一标识每台Android设备的序号? 这个问 ... -
Android调用WebService
2011-05-04 17:12 3392下面例子改自网上例子:http://express.ruank ... -
Android 采用pull生成XML数据
2011-05-03 15:26 1466/* 有些时候,我们需要生成一个XML文件,生成XML文件的 ... -
Android 应用程序之间数据共享—ContentResolver
2011-04-27 22:29 1139Android是如何实现应用程 ... -
Android平台上四种保存数据的方法
2011-04-27 21:50 908对于我们所熟悉的大部分软件都有一个比较典型的特点,应用现有的数 ... -
Android IntentService 深入分析
2011-04-26 22:27 1495Android IntentService 什么是Intent ... -
关于Activity的onSaveInstanceState调用时机的说明
2011-04-26 22:01 3513Activity的生命周期里并没有提到onSaveInstan ... -
Android中的长度单位详解(dp、sp、px、in、pt、mm)
2011-04-25 17:10 1336看到有很多网友不太理解dp、sp和px的区别:现在这里介绍一下 ... -
获取CPU序列号
2011-04-13 17:07 4708/** * 获取CPU序列号 * * @return ...
相关推荐
在Android系统中,时间同步服务是一项至关重要的功能,它确保设备的时间与互联网上的标准时间保持一致,从而保证各种应用程序的正常运行,如日程管理、网络通信等。本压缩包中的"syncClockService"可能包含了实现这...
随着全球信息化和通络通讯技术的迅速发展,人们对时间的精准性要求越来越高。本文通过对NTP 网络时间同步协议和原理的研究,分析了时间同步的架构与流程,提出了NTP 网络时间同步在Android 平台的实现方案。
在Android系统中,时间同步是一项重要的功能,确保设备时间的准确性和一致性。通常,Android设备会通过NITZ(Network Identity and Time Zone)服务来自动同步时间,这依赖于移动网络运营商提供的时间信息。NITZ...
1. **系统时间同步**:Android系统以往已有与网络时间服务器同步时间的功能,如NTP(Network Time Protocol)。但在Android 9.0中,可能进一步强化了这一功能,提供了更便捷的API接口,允许应用程序或系统服务直接...
在Android平台上开发一款网络音乐播放应用,实现歌词同步功能,是一项技术挑战但也充满乐趣。这里我们探讨的关键知识点包括Android应用程序开发、网络数据获取、JSON解析、音频播放以及歌词同步技术。 首先,...
在IT行业中,时间同步是一项至关重要的任务,尤其是在网络通信、数据记录和系统管理等领域。"NTP内网时间同步"的标题和描述指向了一个具体的解决方案,即使用Network Time Protocol(NTP)在局域网(内网)环境中...
在Android应用开发中,获取网络时间是一项常见的需求,主要用于确保应用程序中的时间信息准确无误,避免用户手动修改设备时间导致的潜在问题。本教程将详细讲解如何在Android中实现网络时间的获取,并提供相关的代码...
主要介绍了Android中实现用命令行同步网络时间,本文讲解使用BusyBox实现同步网络时间,并给出了详细操作步骤,需要的朋友可以参考下
安卓手机自带同步时间,Android NTP获取时间 网络时间同步Android 获取时间demo包含apk 和里面的代码本文 不是系统ntp获取时间代码,不过是有借鉴系统ntp service代码开发的demo
在Android平台上,获取网络时间并校准系统时间是一项常见的任务,尤其对于那些需要精确时间同步的应用来说至关重要。本文将深入探讨如何实现这一功能,并提供相关的编程知识点。 首先,要获取网络时间,通常我们会...
总结,NTP时间同步在Android系统中扮演着不可或缺的角色,它确保了设备时间的准确性,从而支持了众多功能的正常运行。理解和掌握NTP的工作原理以及如何在Android环境中实现它是每个Android开发者必备的知识点。
1. **时间同步**:所有设备需要有一个共同的时间基准,可以使用NTP(Network Time Protocol)服务或者在启动时同步一个参考时间。 2. **数据同步**:确保每个设备在同一时间点播放相同的数据帧。发送端需要按照特定...
网络时间同步是通过NTP协议实现的,它允许计算机与远程服务器校准时间,以确保精确性。NTP服务器通常是一组全球分布的高精度原子钟,它们之间相互校对,提供统一的时间标准。客户端计算机通过发送请求到这些服务器,...
最近整理出android-获取网络时间、获取特定时区时间、时间同步的方法。具体如下: 方法一: SimpleDateFormat dff = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); dff.setTimeZone(TimeZone.getTimeZone(GMT+08)); ...
在Android应用开发中,"修改头像并同步服务器"是一个常见的功能需求,用户可以自定义他们的个人形象,而这些更改需要实时同步到云端服务器,以便其他设备或服务能够获取最新的头像信息。以下是对这个功能的详细解释...
在Android平台上进行网络操作是应用程序开发中的重要环节,它允许应用与远程服务器进行数据交互,如获取用户信息、上传下载文件、同步数据等。本文将深入探讨“Android网络操作”的核心概念、常用方法以及如何利用...
首先明确目标:在Android应用中实现网络时间的获取功能。这通常涉及到以下几个步骤: 1. **建立网络连接**:访问提供时间服务的服务器。 2. **发送请求**:向服务器发送获取时间的请求。 3. **接收响应**:从服务器...
【Android代码-开源文件同步安卓版】是一款专为Android设备设计的开源文件同步应用,它允许用户在不同的设备之间安全地、实时地同步和共享文件。这个项目基于Syncthing,一个跨平台的、自由开源的文件同步工具,旨在...
"同步系统时间功能实现"这个主题聚焦于如何在Android平台上获取网络时间并更新本地系统时间,以确保时间的一致性和准确性。以下是对这个功能的详细阐述: 1. **NTP协议**:网络时间协议(Network Time Protocol, ...
在Android网络编程中,还需要注意以下几点: 1. **权限声明**:确保在AndroidManifest.xml中添加了`INTERNET`权限,否则应用无法进行网络访问。 2. **网络连接检测**:在发起请求前,检查设备是否已连接到网络,避免...