2011-11-12 14:20:49 iteye_10490 阅读数 26
  • Android底层技术:HAL驱动开发

    本课程提供开发者学习Android底层的HAL(硬件抽象层)的开发方法和技术。HAL所在的位置是介于Android系统服务与Linux内核之间,HAL Driver是以library形式出现,给HAL Stub调用,供Android System架构者调用。而HAL Stub则是google设计出来的,保护硬件厂商的硬件驱动。

    17819 人正在学习 去看看 高煥堂
[url=http://www.buildapp.net/android/show.asp?id=43300]可固定左边一列,上下左右滑动的listview[/url]

[url=http://www.buildapp.net/android/show.asp?id=43299]widget时钟(调用系统时钟类)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43298]Intent 传递复杂对象[/url]

[url=http://www.buildapp.net/android/show.asp?id=43297]关于Android线程模型与AsyncTask[/url]

[url=http://www.buildapp.net/android/show.asp?id=43296]用activity实现半透明的、淡入的menu【原创】[/url]

[url=http://www.buildapp.net/android/show.asp?id=43295]类似QQ的tab的滑动效果的基本原理代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43294]Android 屏幕旋转代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43293]Android远程登录含有loading登录效果~~完整代码和超级详细注释[/url]

[url=http://www.buildapp.net/android/show.asp?id=43292]个人写的txt阅读器,供android入门者参考[/url]

[url=http://www.buildapp.net/android/show.asp?id=43291]Android的基础例子10个[/url]

[url=http://www.buildapp.net/android/show.asp?id=43290]Android 多媒体开的源码,发出来分享一下[/url]

[url=http://www.buildapp.net/android/show.asp?id=43289]新浪微博采用Oauth发送图片和文字[/url]

[url=http://www.buildapp.net/android/show.asp?id=43288]本人做的拼图游戏软件[/url]

[url=http://www.buildapp.net/android/show.asp?id=43287]Android开发必备和常用的代码素材[/url]

[url=http://www.buildapp.net/android/show.asp?id=43286]WIFI 无线耳机[/url]

[url=http://www.buildapp.net/android/show.asp?id=43285]Android面试时的问题,实现半透明的popupwindow的源码★修订版★[/url]

[url=http://www.buildapp.net/android/show.asp?id=43284]Android 通过什么来实现帧动画[/url]

[url=http://www.buildapp.net/android/show.asp?id=43283]Android 跨进程通信(一)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43282]android使用http协议上传文件[/url]

[url=http://www.buildapp.net/android/show.asp?id=43281]使用HTML,CSS,JavaScript开发Android应用程序[/url]

[url=http://www.buildapp.net/android/show.asp?id=43280]一个简单万年历的实现[/url]

[url=http://www.buildapp.net/android/show.asp?id=43279]ActivityGroup + GridView + ViewFlipper 实现选项卡[/url]

[url=http://www.buildapp.net/android/show.asp?id=43278]构建 Android 手机 RSS 阅读器(最新代码)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43277]andengine游戏引擎sample[/url]

[url=http://www.buildapp.net/android/show.asp?id=43276]Android 用map上画出路线(二)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43275]QR条形码扫描和我查查淘宝客户端等一样的效果动态抓取解析[/url]

[url=http://www.buildapp.net/android/show.asp?id=43274]中文TTS 实现[/url]

[url=http://www.buildapp.net/android/show.asp?id=43273]水果连连看程序【源码下载】, 有背景音乐、音效[/url]

[url=http://www.buildapp.net/android/show.asp?id=43272]在eclipse中关联android源代码方便开发[/url]

[url=http://www.buildapp.net/android/show.asp?id=43271]Android实现短信监听并且转发到指定的手机号,转发后不留痕[/url]

[url=http://www.buildapp.net/android/show.asp?id=43270]发布一个音乐播放器源码,绝对能用[/url]

[url=http://www.buildapp.net/android/show.asp?id=43269]自定义listview显示网络图片,调用手机播放器播放网络视频[/url]

[url=http://www.buildapp.net/android/show.asp?id=43268]我要发布Brightness(亮度)的程序[/url]

[url=http://www.buildapp.net/android/show.asp?id=43267]自己写的一个简单电子购物系统[/url]

[url=http://www.buildapp.net/android/show.asp?id=43266]仿iphone的listview下拉更新[/url]

[url=http://www.buildapp.net/android/show.asp?id=43265]共享包含多种Android特效实现的Demo,可能有你要找的[/url]

[url=http://www.buildapp.net/android/show.asp?id=43264]仿 UC,墨迹天气左右拖动 多屏幕显示效果[/url]

[url=http://www.buildapp.net/android/show.asp?id=43263]google开源代码-wordsnap-ocr android文字拍照识别 【有图有源码![/url]

[url=http://www.buildapp.net/android/show.asp?id=43262]浙大Android开发讲解课件和源代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43261]基于股票的一个Android应用(内含源码)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43260]美食天下服务器源代码+客户端源代码+开发PPT[/url]

[url=http://www.buildapp.net/android/show.asp?id=43259]绝对给力的源码,在线音乐播放器完整项目[/url]

[url=http://www.buildapp.net/android/show.asp?id=43258]音乐播放器,支持边下边播,歌词同步[/url]

[url=http://www.buildapp.net/android/show.asp?id=43257]完善QQ登陆框接力赛,更多功能期待你的参与,持续更新中。[/url]

[url=http://www.buildapp.net/android/show.asp?id=43256]苹果界面聊天窗口[/url]

[url=http://www.buildapp.net/android/show.asp?id=43255]Android自定义泡泡效果(表达不清,看图片吧)有代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43254]Android学习代码,并附上豆瓣网for android项目工程[/url]

[url=http://www.buildapp.net/android/show.asp?id=43253]Android 使用GPS在地图上进行定位[/url]

[url=http://www.buildapp.net/android/show.asp?id=43252]mars老师android视频教程源码集锦(有需要的来下吧……)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43251]Android应用的自动升级、更新模块的实现完整方案+参考程序代[/url]

[url=http://www.buildapp.net/android/show.asp?id=43250]Android腾讯微薄客户端源代码(非常劲爆)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43249]mars老师第一季PPT源代码打包[/url]

[url=http://www.buildapp.net/android/show.asp?id=43248]口袋微博 服务器 客户端代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43247]Android-UI详解:软键盘弹出动态改变UI布局(IM聊天窗口设计示例)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43246]Android web服务[/url]

[url=http://www.buildapp.net/android/show.asp?id=43245]eclipse中android开发快速生成jni的插件(带源码)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43244]在公司写的工厂测试代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43243][附源代碼]自定义View控件解决android文字排版和换行的问题[/url]

[url=http://www.buildapp.net/android/show.asp?id=43242]新人发布坦克大战游戏源码--Android游戏源码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43241]android内置搜索对话框(浮动搜索)例子[/url]

[url=http://www.buildapp.net/android/show.asp?id=43240]android功能测试软件[/url]

[url=http://www.buildapp.net/android/show.asp?id=43239]Android 在自定义Tab[/url]

[url=http://www.buildapp.net/android/show.asp?id=43238]Google地图按地图名称搜索[/url]

[url=http://www.buildapp.net/android/show.asp?id=43237]Android 基础全面的教程下载[/url]

[url=http://www.buildapp.net/android/show.asp?id=43236]APP--简单的WIFI开发(带密码)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43235]跪求Android Launcher pro 源代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43234]自己做的一个音乐播放器(含源代码)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43233]APP--WIFI/3G切换[/url]

[url=http://www.buildapp.net/android/show.asp?id=43232]两种方式实现照相机camera[/url]

[url=http://www.buildapp.net/android/show.asp?id=43231]ListView放到ScrollView中的完美实现[/url]

[url=http://www.buildapp.net/android/show.asp?id=43230]*SD卡文件浏览器* 源码+详解 很适合新手学习!![/url]

[url=http://www.buildapp.net/android/show.asp?id=43229]有人有Activity跳转呈现3D动画效果的Demo吗[/url]

[url=http://www.buildapp.net/android/show.asp?id=43228]使用Android自带Gallery组件实现CoverFlow,源码+解析[/url]

[url=http://www.buildapp.net/android/show.asp?id=43227]人人---- renren(校内)Android sdk 简单的客户端源代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43226]最新最小人人(校内)OAUTH2.0授权代码项目[/url]

[url=http://www.buildapp.net/android/show.asp?id=43225]android 例子 (27个涵盖了android开发的各个方面)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43224]android开源书架代码~可以用来研究线程问题[/url]

[url=http://www.buildapp.net/android/show.asp?id=43223]Android 音乐播放器源码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43222]找到的一个商业项目源码,分享一下[/url]

[url=http://www.buildapp.net/android/show.asp?id=43221]音乐播放器[/url]

[url=http://www.buildapp.net/android/show.asp?id=43220]我来盗版一下android优化大师主界面,哈哈,有图[/url]

[url=http://www.buildapp.net/android/show.asp?id=43219]音乐播放器中的进度条++音量控制(很简单的)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43218]一个简单的音乐在线播放器[/url]

[url=http://www.buildapp.net/android/show.asp?id=43217]Android 天气预报源码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43216]优化大师客户端(整个客户端),有次停电代码掉了部分[/url]

[url=http://www.buildapp.net/android/show.asp?id=43215]【源码发布】仿UCWEB7.4界面最新MENU菜单 源码放出~![/url]

[url=http://www.buildapp.net/android/show.asp?id=43214]联系人管理程序代码(UI较好) 代码+图 版主实习期发帖【三】[/url]

[url=http://www.buildapp.net/android/show.asp?id=43213]android模仿engadget(菜单),很iPhone[/url]

[url=http://www.buildapp.net/android/show.asp?id=43212]MP3播放器,带卡拉OK字幕,(源码已上传)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43211]android QQ界面和部分逻辑(更新,使用Map显示下拉框)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43210]基于Android的拼音输入法PinyinIM可比肩OpenWnn(内含源码)[/url]

[url=http://www.buildapp.net/android/show.asp?id=43209]求开发闹钟定时铃声提醒的代码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43208]益智拼图游戏[/url]

[url=http://www.buildapp.net/android/show.asp?id=43207]拼图游戏,可设置难度和camera捕捉图片[/url]

[url=http://www.buildapp.net/android/show.asp?id=43206]小小的音频播放器[/url]

[url=http://www.buildapp.net/android/show.asp?id=43205]分享拼图游戏的源码[/url]

[url=http://www.buildapp.net/android/show.asp?id=43204]android平台水波效果![/url]

[url=http://www.buildapp.net/android/show.asp?id=43203]Android人脸识别功能使用[/url]

[url=http://www.buildapp.net/android/show.asp?id=43202]经典魂魄罗游戏,导入工程可以直接运行[/url]

[url=http://www.buildapp.net/android/show.asp?id=43201]乐看播放器源代码,对写视频播放的人来说非常有用[/url]

更多android开发资料,请访问http://www.buildapp.net/android/
2017-04-05 10:57:19 WDYShowTime 阅读数 10368
  • Android底层技术:HAL驱动开发

    本课程提供开发者学习Android底层的HAL(硬件抽象层)的开发方法和技术。HAL所在的位置是介于Android系统服务与Linux内核之间,HAL Driver是以library形式出现,给HAL Stub调用,供Android System架构者调用。而HAL Stub则是google设计出来的,保护硬件厂商的硬件驱动。

    17819 人正在学习 去看看 高煥堂

不积跬步,无以至千里。

 

一、时钟整体看

注册表信息:

权限调用:

        开机启动的广播              RECEIVE_BOOT_COMPLETED

        屏幕保持唤醒                WAKE_LOCK

        手机震动                    VIBRATE

        修改全局系统设置            WRITE_SETTING

        禁用键盘锁                  DISABLE_KEYGUARD

        读写手机状态和身份          READ_PHONE_STATE

        允许访问底层电源管理        DEVICE_POWER

        读写外存储                  READ_EXTERNAL_STORAGE

<application/>中用到了android:uiOptions=”splitActionBarWhenNarrow”为屏幕较小分配较好的空间

 

时钟整体的设计:

ActionBar+ViewPager+Fragment

入口类DeskClock(不全面)

Activity生命周期来说:

onCreate:

1、 利用了Action判断显示到哪个Tab中,默认为时间界面

2、 InitViews方法对控件的初始化

3、 TabAdapter为适配器,其中ActionBar有一个AddTab(动态增加Tab方法)

4、 SetHomeTimeZone方法:

onPrepareOptionsMenu动态添加选项菜单:每点击一下去刷新一下菜单,本身有设置(夜间、帮助被隐藏了)——个人项目需求

 

摘要:

Android系统闹钟定时功能框架,总体来说就是用数据库存储定时数据,有一个状态管理器这些定时状态的触发和更新都交给它来处理,他就像电脑的CPU、人的大脑。像闹钟这种应用程序,每天重复定时,或者一周选择其中几天,闹钟响了5分钟后,再次响铃,这时候就需要一种好的办法来管理这些数据和状态,下面就来分析一下Android系统闹钟的具体实现。

二、时钟之闹钟

 

1、 基本结构

Alarm代表一条定时数据

AlarmInstance代表一条定时项目的实例,一个AlarmInstance对应一个alarm但比Alarm多了更多的状态信息

AlarmStateManager状态管理器,对定时项目进行调度,添加、删除、更改状态,是一个广播类,定时到点后发广播到这里,进行下一步处理。

AlarmService响应结果,也就是定时到达后要做的事,响铃、停止铃声

ClockDataHelper里面创建了三个表,ALARMS_TABLE,INSTANCE_TABLE,CITIES_TABLE前两个分别对应上面的Alarm和AlarmInstance

ClockDataHelper类中的三个表:Alarm表、AlarmInstance表、Cityies表

 

代码示例:

 

                             本地数据库创建的Alarms表

代码示例:

 

                             本地数据库创建的Alarminstance表

代码示例:

                             本地数据库创建的Cities表

 

 

这里说一下几个特殊的字段,对Alarm表,DAYS_OF_WEEK表示一周内需要定时的天(闹钟有一个功能就是选择一周的几天,这里是int值,用位来表示设置的天数,而provider包下有个专门的类Daysofweek来存储和处理

AlarmInstance表中一个Alarm_IO,关联到一个Alarm,可以看到在AlarmInstance表里也有时间,其中这两个时间是不一样的,Alarm表示原始的定时,一个不变的数据,而AlarmInstance则代表了一个使用中的定时项目,或者是一个随时间变化的数据。它的时间是变化的,比如闹钟响了以后延时10分钟,再响就需要改变这里的时间,而基础数据不能变,还需要显示在那里。Alarm_state代表了当前定时项目的状态,具体都是由AlarmStateManager来管理的

 

要想了解闹钟呢,就要先了解这几个类

1、 Alarm类

这个类是Alarm信息对于数据库的增删改查操作

还有一个就是创建AlarmInstance方法

 

 

 

AlarmInstance类和alarm类一样,他也有对于数据库的增删改查等操作、因为其时间上是动态的因此多了set、get方法

 

 

 

时间上的处理方法:

设置:

获取:

闹钟的几种状态

SILENT_STATE,alarm被激活,但是不需要显示任何东西,下一个状态LOW_NOTIFICATION_STATE;

LOW_NOTIFICATION_STATE,这个状态表示alarm离触发的时间不远了,时间差AlarmInstance.LOW_NOTIFICATION_HOUR_OFFSET=-2,也就是2个小时。下一个状态会进入HIGH_NOTIFICATION_STATE,HIDE_NOTIFICATION_STATE,DISMISS_STATE;

HIDE_NOTIFICATION_STATE,这是一个暂时态,表示用户想隐藏掉通知,这个状态会一直持续到HIGH_NOTIFICATION_STATE;

HIGH_NOTIFICATION_STATE,这个状态和LOW_NOTIFICATION_STATE相似,但不允许用户隐藏通知,负责触发FIRED_STATE或者DISMISS_STATE;它的触发时间为30分钟之前

SNOOZED_STATE,像HIGH_NOTIFICATION_STATE,但是会增加一点定时的时间来完成延迟功能;

FIRED_STATE,表示响铃状态,会启动AlarmService直到用户将其变为SNOOZED_STATE或者DISMISS_STATE,如果用户放任不管,会之后进入MISSED_STATE;

MISSED_STATE,这个状态在FIRED_STATE之后,会在通知栏给出一个提醒刚才响铃了;

DISMISS_STATE,这个状态表示定时结束了,会根据定时项目的设置判断是否需要重复,从而决定要删除这个项目还是继续设定一个新的定时。

 

 

界面分析

AlarmClockFragment的界面功能分析(从生命周期上分析)

 

1、OnCreateView

解析Fragment

从Bundle中获取数据:传递了几个参数

startCreatingAlarm方法:创建一个TimePickerDialog,设置闹钟时间,创建一个Alarm实体对象,根据RingtoneManager铃声管理对象获得一个默认铃声的uri,并对Alarm对象进行属性设置

1、 OnResume方法

1、 检查是否有别的app是否有请求到这,去创建一个闹钟,然后清空这个intent

2、 是否从deskclock界面滚到alarm假面的(更新到最新的数据界面)

3、  OnDestroy

    对于对创建的ToastMaster.cancelToast()将Toast置空

onActivityResult:

对在另一个Activity中获取的铃声uri进行设置显示,并把这个铃声设置成默认铃声

bindView方法(Adapter的方法)

1、利用持有者优化、以及对于tag的判空对ListView的优化

  2、expandAlarm对于item中扩展方法

  3、以及对其中控件重复的处理

      对这重复中的处理两种方式 1、对存储状态的获取,然后进行设置

                                2、对其中重复中的控件的监听方法的设置

                                3、对于扩展与收缩的动画的处理

                                4、对其中注册了一个监听视图树的观察者模式

 

创建一个闹钟的步骤

 

 

1、 AlarmClockFragment中的onCreateView方法

 

2、 AlarmClockFragment中的startCreatingAlarm()

 

3、 AlarmClockFragment中的asyncAddAlarm(a)

 

4、 AlarmClockFragment中的setupAlarmInstance方法

 

5、AlarmStateManager的registerInstance()

因为其中要对Alarminstance中State状态判断,但是还没有状态就进入到了else中

 

 

5、 AlarmStateManager的setSilentState方法

 这里就是AlarmStateManager对这些状态的处理要,同时会规划一个定时转换成下一个状态。

 

从这可以看出这个状态将要由silentState——》Low_NoTIFICATION_State,而这个状态是从AlarmInstance中得到的可见为AlarmInstance.getLowNoticationTime()得到的;

 

6、 AlarmStateManager的scheduleInstanceStateChange方法

更新AlarmInstance的状态 信息,通过此方法规定下一个状态

 

在createStateChangeIntent方法中设置了intent中的state属性为Low_NOTIFICATION,并传递了两个属性用户onReceive中的处理属性为:ALARM_GLOBAL_ID_EXTRA、ALARM_STATE_EXTRA

 

7、 AlarmStateManager的onReceiver方法

其为了来接收规划好的推迟Intent的广播,LOW_NOTIFICATION_HOUR_OFFSET值为-2,其在前面可以看出将要在闹钟响之前的前两个小时就会发出这个延迟的广播意图,然后AlarmStateManager将会把这个状态改变为下一个状态

 

其处理方法在HandleIntent方法中,经过处理将要转移到setAlarmState方法中

 

 

 

8、 AlarmStateManager的setAlarmState方法

 

 

9、对于每一个state将转移到相应的setXXXXState方法中,完成下一次状态的转换形成一个定时的循环,直到到达DiSSMISSED_STATE里停用或者删除定时的item,如果需要重复则会获取到下一次的定的时间

例如以下是:由Slience_STATE状态变为了LOW_NOTIFICATION状态,他将要进行下次的规划变为HIGH_NOTIFICATION状态,并且调用setLowNotificationState方法,具体看下面

 

其中的AlarmNotification.showLowPriorityNotification方法,将会在通知栏上创建一个通知,并为此通知设置了一个监测用户移除次通知Notification的事件

 

接下来就如所说,就是进入定时的循环。

如上,都是类同的,下面看一下FIRED_STATE:

开启了AlarmService,

 

就来到了AlarmService.startAlarm方法

 

查看onCommand方法,就会进入startAlarm方法

 

然后进入startAlarm方法中,就会进入到AlarmNotification.showAlarmNotification(this,mCurrentAlarm);

 

接下来就会进入到Notification中的showAlarmNotification方法,接下里就会看到睡眠的这个意图

 

同样下面还有一个消失的意图,还有设置满屏

 

1、当用户按了睡眠时,将会睡眠几分钟,关闭闹铃铃声和振动,将会设置新的闹钟时间,即为:现在时间+睡眠时间(设置那存储的Prefrence中取出),更新数据库中的AlarmInstance,并发送通知和下次的FIRED_STATE

2、用户直接关闭的话,就会进入到DisMiss_STATE状态将会执行unregisterInstance方法(下面介绍)和删除这个AlarmInstance和并根据用户是否设置重复更新下一个闹钟

 

Unregisterinstance方法,关闭铃声和振动等、移除所有和这个AlarmInstance有关的的计时器和通知,下图为其方法

 

3、用户如果不去管闹钟的如下图,会在Preference中获取到timeout的时间,然后去规范推迟意图成为Miss状态

 

这里为获取timeout的时间

 

查看SetMissState方法,将会停止闹钟服务,更新AlarmInstance的实例在数据库,发送通知,并规划推迟意图成为DIsMiss_STATE

 

同样会停止AlarmService的服务,并且会更新数据库中AlarmInstance的状态,并会发送Miss通知,

规划下一DissMissed的意图,并根据用户是否设置重复更新下一个闹钟。

 

小想法:闹钟声音设计,可以设计一个方法,让闹钟随着时间改变音量逐渐声音变大,叫醒沉睡者!

 

代码URL=http://download.csdn.net/download/wdyshowtime/9966509

观赏也是种力量,谢谢您的观看。吐舌头

 

 

 

 

 

2017-06-03 14:29:36 lipengshiwo 阅读数 1679
  • Android底层技术:HAL驱动开发

    本课程提供开发者学习Android底层的HAL(硬件抽象层)的开发方法和技术。HAL所在的位置是介于Android系统服务与Linux内核之间,HAL Driver是以library形式出现,给HAL Stub调用,供Android System架构者调用。而HAL Stub则是google设计出来的,保护硬件厂商的硬件驱动。

    17819 人正在学习 去看看 高煥堂

时间1970-1-1 0:0无法设置的代码调用和原因

根因:时间设置从0101起始,而非00:00起始

1. 从界面布局定位到时间设置DateTimeSettings.java

packages/apps/Settings/src/com/android/settings/DateTimeSettings.java

static void setTime(Context context, int hourOfDay, int minute) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
         Log.d("lp","setTime:" + "hourOfDay:" + hourOfDay + "Calendar.HOUR_OF_DAY:" + Calendar.HOUR_OF_DAY);
c.set(Calendar.MINUTE, minute);
         Log.d("lp","Calendar.MINUTE:" + Calendar.MINUTE + "minute:" + minute);
c.set(Calendar.SECOND, 0);
         Log.d("lp","Calendar.SECOND:" + Calendar.SECOND);
c.set(Calendar.MILLISECOND, 0);
         Log.d("lp","Calendar.MILLISECOND:"+Calendar.MILLISECOND);
long when = c.getTimeInMillis();
         Log.d("lp","when:" + when + "Integer.MAX_VALUE" + Integer.MAX_VALUE);
if (when / 1000 < Integer.MAX_VALUE) {
            ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
        }
}


 

Log信息如下:

D/lp    ( 6873): onPreferenceTreeClick:
D/lp    ( 6873): onTimeSet:
D/lp    ( 6873): setTime:hourOfDay:0Calendar.HOUR_OF_DAY:11
D/lp    ( 6873): Calendar.MINUTE:12minute:0
D/lp    ( 6873): Calendar.SECOND:13
D/lp    ( 6873): when:1406764800000Integer.MAX_VALUE2147483647
 
D/lp    ( 6873): onPreferenceTreeClick:
D/lp    ( 6873): onTimeSet:
D/lp    ( 6873): setTime:hourOfDay:0Calendar.HOUR_OF_DAY:11
D/lp    ( 6873): Calendar.MINUTE:12minute:0
D/lp    ( 6873): Calendar.SECOND:13
D/lp    ( 6873): when:1406761200000Integer.MAX_VALUE2147483647
 
D/lp    ( 6873): onPreferenceTreeClick:
D/lp    ( 6873): onTimeSet:
D/lp    ( 6873): setTime:hourOfDay:1Calendar.HOUR_OF_DAY:11
D/lp    ( 6873): Calendar.MINUTE:12minute:1
D/lp    ( 6873): Calendar.SECOND:13
D/lp    ( 6873): when:60000Integer.MAX_VALUE2147483647
 
D/lp    ( 6873): onPreferenceTreeClick:
D/lp    ( 6873): onTimeSet:
D/lp    ( 6873): setTime:hourOfDay:1Calendar.HOUR_OF_DAY:11
D/lp    ( 6873): Calendar.MINUTE:12minute:0
D/lp    ( 6873): Calendar.SECOND:13
D/lp    ( 6873): when:0Integer.MAX_VALUE2147483647


2.frameworks时间设定DatePicker.java

static void configureDatePicker(DatePicker datePicker) {
// The system clock can't represent dates outside this range.
Calendar t = Calendar.getInstance();
t.clear();
t.set(1970, Calendar.JANUARY, 1);
datePicker.setMinDate(t.getTimeInMillis());
t.clear();
t.set(2036, Calendar.DECEMBER, 31);
datePicker.setMaxDate(t.getTimeInMillis());
}
//设置日期时间起始及结束日期


frameworks/base/core/java/android/widget/DatePicker.java

public void setMinDate(long minDate) {
mTempDate.setTimeInMillis(minDate);
if (mTempDate.get(Calendar.YEAR) == mMinDate.get(Calendar.YEAR)
&& mTempDate.get(Calendar.DAY_OF_YEAR) != mMinDate.get(Calendar.DAY_OF_YEAR)) {
return;
}
mMinDate.setTimeInMillis(minDate);
mCalendarView.setMinDate(minDate);
if (mCurrentDate.before(mMinDate)) {
mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis());
updateCalendarView();
}
 
updateSpinners();
}
//限定最小及最大日期


 

3.UTC GMT

协调世界时,又称世界统一时间,世界标准时间,国际协调时间。简称UTC

协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。

 

格林尼治标准时间Greenwich Mean TimeGMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时(UTC——原子钟提供。192425日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。而UTC是基于标准的GMT提供的准确时间。



相关查阅资料链接:

http://www.iteye.com/problems/10232

http://blog.csdn.net/kunkun378263/article/details/22681733

http://baike.baidu.com/link?url=ii7Z5tY3wTbd3LpqzVkyJPpVmwF6DPkZrhNikgeNYvj1Lw16Flm6FzcPrgqXkpBDlSWvMLWpnMMOrPQUTGBmXq

http://zhidao.baidu.com/link?url=fCj9Fdj9BkRmsM3y6Ru3TI0glI2ONx-FjQjXI3svxs5ss-Y1QJ4zT1ElPL9IWa_pLEJqMzIuzoDVY_pnRy8mlq


2018-08-10 00:27:06 luzire 阅读数 968
  • Android底层技术:HAL驱动开发

    本课程提供开发者学习Android底层的HAL(硬件抽象层)的开发方法和技术。HAL所在的位置是介于Android系统服务与Linux内核之间,HAL Driver是以library形式出现,给HAL Stub调用,供Android System架构者调用。而HAL Stub则是google设计出来的,保护硬件厂商的硬件驱动。

    17819 人正在学习 去看看 高煥堂

又12点了。啊。。。 每到这个时候就要开始记录自己遇到的问题了。不叨叨,直接上硬菜。

目的:在android UI 上实时显示系统时间

做法:(过程当中没有使用import  引用其他的库)

1、获取系统时间

long ms = System.currentTimeMillis();         (ms 就是读取到的时间值。)

2、因为我们需要使用 《 年  月  日  时  分  秒   周 》,系统提供了格式转换函数

CharSequence systimestr = DateFormat.format("yyyy-MM-ddhh:mm:ssEEE",ms);  (注意 EEE是 周x  EEEE是 星期X)

3、单独将年月日时分秒周分离开来。我是将systimestr  转成字符串来处理的。

date = systimestr.toString();
year = date.substring(0,4);
month = date.substring(5,7);
day = date.substring(8,10);
hour = date.substring(10,12);
minute = date.substring(13,15);
second = date.substring(16,18);
week = date.substring(18,20);

substring(start,end);是用来截取字符串的。比如“1234”,想截取“1”出来,则substring(0,1)。想截取“2”出来,则substring(1,2)。end 是不显示的。

 

注意:我使用了calender 和  TimeZone 来读取时间,无法实现秒计数。貌似是只读取一次。我估计是我操作的不正确。好了,时间搞定了。

 

小插曲:

TextView :

1、setTextSize(12);设置字体大小为12

2、xml 布局没有找到窍门,需继续摸索。

2013-09-14 16:37:28 jake20001 阅读数 646
  • Android底层技术:HAL驱动开发

    本课程提供开发者学习Android底层的HAL(硬件抽象层)的开发方法和技术。HAL所在的位置是介于Android系统服务与Linux内核之间,HAL Driver是以library形式出现,给HAL Stub调用,供Android System架构者调用。而HAL Stub则是google设计出来的,保护硬件厂商的硬件驱动。

    17819 人正在学习 去看看 高煥堂

1,模拟时钟和数字时钟的直接调用

2,用一个TextView显示获取的当前时间

3,修改系统默认的时间格式为24小时制


package irdc.EX04_14_B;
/*
 * @author Modfiy by jake20001@126.com 
 * */

import android.app.Activity;
import android.content.ContentResolver;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle; /*这里我们需要使用Handler类别与Message类别来处理线程*/
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.AnalogClock;
import android.widget.DigitalClock;
import android.widget.TextView; /*需要使用Java的Calendar与Thread类别来取得系统时间*/

import java.util.Calendar;
import java.lang.Thread;

public class EX04_14_B extends Activity
{ /* 宣告一常数作为判别讯息用 */
  protected static final int GUINOTIFIER = 0x1234; /* 宣告两个widget对象变量 */
  protected static final String TAG = "EX04_14";
  private TextView mTextView;
  public AnalogClock mAnalogClock; /* 宣告与时间相关的变量 */
  public Calendar mCalendar;
  public int mMinutes;
  public int mHour; /* 宣告关键Handler与Thread变量 */
  public Handler mHandler;
  private Thread mClockThread;
  public DigitalClock mDigitalClock;
  
  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); /* 透过findViewById取得两个widget对象 */
    mTextView = (TextView) findViewById(R.id.myTextView);
    mAnalogClock = (AnalogClock) findViewById(R.id.myAnalogClock); /* 透过Handler来接收线程所传递的信息并更新TextView */
    mDigitalClock = (DigitalClock) findViewById(R.id.myDigitalClock);
    Resources res = getResources();
    Configuration conf = res.getConfiguration();
    ContentResolver cv = this.getContentResolver();
    String strTimeFormat = android.provider.Settings.System.getString(cv,
                                       android.provider.Settings.System.TIME_12_24);
    
    if(strTimeFormat.equals("12"))
    {
          Log.i(TAG,"12");
          android.provider.Settings.System.putString(cv, android.provider.Settings.System.TIME_12_24, "24");
    }
    mHandler = new Handler()
    {
      public void handleMessage(Message msg)
      { /* 这里是处理信息的方法 */
        switch (msg.what)
        {
          case EX04_14_B.GUINOTIFIER: /* 在这处理要TextView对象Show时间的事件 */
            mTextView.setText(mHour + " : " + mMinutes);
            Log.i(TAG,"2222222222222222");
            break;
        }
        super.handleMessage(msg);
      }
    }; /* 透过线程来持续取得系统时间 */
    mClockThread = new LooperThread();
    Log.i(TAG,"000000000000000000");
    mClockThread.start();
  } /* 改写一个Thread Class用来持续取得系统时间 */

  class LooperThread extends Thread
  {
    public void run()
    {
      super.run();
      try
      {
        do
        { /* 取得系统时间 */
          long time = System.currentTimeMillis(); /* 透过Calendar对象来取得小时与分钟 */
          final Calendar mCalendar = Calendar.getInstance();
          mCalendar.setTimeInMillis(time);
          mHour = mCalendar.get(Calendar.HOUR);
          mMinutes = mCalendar.get(Calendar.MINUTE); /* 让线程休息一秒 */
          Thread.sleep(1000); /* 重要关键程序:取得时间后发出讯息给Handler */
          Message m = new Message();
          m.what = EX04_14_B.GUINOTIFIER;
          mHandler.sendMessage(m);
          Log.i(TAG,"11111111111111111");
        } while (EX04_14_B.LooperThread.interrupted() == false); /* 当系统发出中断讯息时停止本循环 */
      } catch (Exception e)
      {
        e.printStackTrace();
      }
    }
  }
}

在layout的xml下加入系统自带的2个时钟类型

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  android:id="@+id/widget27"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
>
<AnalogClock
  android:id="@+id/myAnalogClock"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
>
</AnalogClock>
<DigitalClock
    android:id="@+id/myDigitalClock"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    ></DigitalClock>
<TextView
  android:id="@+id/myTextView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="TextView"
  android:textSize="20sp"
  android:textColor="@drawable/white"
  android:layout_gravity="center_horizontal"
>
</TextView>
</LinearLayout>


加写系统的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="irdc.EX04_14_B"
      android:versionCode="1"
      android:versionName="1.0.0">
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
    
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="irdc.EX04_14_B.EX04_14_B"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="7" />
    
</manifest> 


没有更多推荐了,返回首页