全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.设置定时时间文件:packages/apps/alarmclock/src/com/android/alarmclock/Alarms.javaprivate static void enableAlert(Context context, final Alarm alarm, final long atTimeInMillis) AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); . am.set(AlarmManager.RTC_WAKEUP, atTimeInMillis, sender); . 由闹钟管理器设置定时时间。2.闹钟管理器文件:frameworks/base/core/java/android/app/AlarmManager.javapublic static final int RTC_WAKEUP = 0; public static final int RTC = 1; public static final int ELAPSED_REALTIME_WAKEUP = 2;public static final int ELAPSED_REALTIME = 3; AlarmManager(IAlarmManager service) mService = service; public void set(int type, long triggerAtTime, PendingIntent operation) try mService.set(type, triggerAtTime, operation); catch (RemoteException ex) 将type, triggerAtTime, operation等参数转向闹钟管理器服务。3.闹钟管理器服务文件:frameworks/base/services/java/com/android/server/AlarmManagerService.java3.1定时设置public AlarmManagerService(Context context) mDescriptor = init(); .public void set(int type, long triggerAtTime, PendingIntent operation) setRepeating(type, triggerAtTime, 0, operation); public void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) if (operation = null) Log.w(TAG, set/setRepeating ignored because there is no intent); return; synchronized (mLock) Alarm alarm = new Alarm(); alarm.type = type; alarm.when = triggerAtTime; alarm.repeatInterval = interval; alarm.operation = operation; / Remove this alarm if already scheduled. removeLocked(operation); if (localLOGV) Log.v(TAG, set: + alarm); int index = addAlarmLocked(alarm); if (index = 0) setLocked(alarm); private void setLocked(Alarm alarm) if (mDescriptor != -1) set(mDescriptor, alarm.type, (alarm.when * 1000 * 1000); else Message msg = Message.obtain(); msg.what = ALARM_EVENT; mHandler.removeMessages(ALARM_EVENT); mHandler.sendMessageAtTime(msg, alarm.when); Init,set 为底层操作函数,set(mDescriptor, alarm.type, (alarm.when * 1000 * 1000); 由底层来完成定时设置。3.2等待计时结束private class AlarmThread extends Thread public void run() . while (true) int result = waitForAlarm(mDescriptor); . if (result & RTC_WAKEUP_MASK) != 0) triggerAlarmsLocked(mRtcWakeupAlarms, triggerList, nowRTC); if (result & RTC_MASK) != 0) triggerAlarmsLocked(mRtcAlarms, triggerList, nowRTC); if (result & ELAPSED_REALTIME_WAKEUP_MASK) != 0) triggerAlarmsLocked(mElapsedRealtimeWakeupAlarms, triggerList, nowELAPSED); if (result & ELAPSED_REALTIME_MASK) != 0) triggerAlarmsLocked(mElapsedRealtimeAlarms, triggerList, nowELAPSED); . 在服务里采用线程来处理计时结束返回的信息,根据等待计时结束返回的信息触发不同的操作。4.硬件调用文件:frameworks/base/services/jni/com_android_server_AlarmManagerService.cpp4.1 定时设置static jint android_server_AlarmManagerService_init(JNIEnv* env, jobject obj)#if HAVE_ANDROID_OS return open(/dev/alarm, O_RDWR);#else return -1;#endifstatic void android_server_AlarmManagerService_close(JNIEnv* env, jobject obj, jint fd)#if HAVE_ANDROID_OS close(fd);#endifstatic void android_server_AlarmManagerService_set(JNIEnv* env, jobject obj, jint fd, jint type, jlong nanoseconds)#if HAVE_ANDROID_OS struct timespec ts; ts.tv_sec = NANOSECONDS_TO_SECONDS(nanoseconds); ts.tv_nsec = nanoseconds - SECONDS_TO_NANOSECONDS(ts.tv_sec); int result = ioctl(fd, ANDROID_ALARM_SET(type), &ts); if (result 0) LOGE(Unable to set alarm to %lld: %sn, nanoseconds, strerror(errno); #endif以上函数的绑定如下: init, ()I, (void*)android_server_AlarmManagerService_init, close, (I)V, (void*)android_server_AlarmManagerService_close, set, (IIJ)V, (void*)android_server_AlarmManagerService_set,由上可知,通过ioctl接口,设置定时时间。4.2 等待计时结束static jint android_server_AlarmManagerService_waitForAlarm(JNIEnv* env, jobject obj, jint fd)#if HAVE_ANDROID_OS int result = 0; do result = ioctl(fd, ANDROID_ALARM_WAIT); while (result 0 & errno = EINTR); if (result
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 垃圾填埋场渗滤液沉淀池优化设计
- 城市道路提升改造工程技术方案
- 风电场环境保护与生态恢复方案
- 兵团法院公务员考试试题及答案
- 巴中市柳林镇公务员考试试题及答案
- 安全技术管理公务员考试试题及答案
- 城市道路环境整治提升改造项目规划设计方案
- 2026年蔬菜种植公司绿禾蔬菜品牌建设与宣传推广制度
- 文化产业市场分析:影视出版与动漫产业研究
- 2025浙江杭州市余杭区瓶窑镇巡查执法辅助人员招考易考易错模拟试题(共500题)试卷后附参考答案
- 领导干部任前廉政知识考试试题库(含答案)
- 2025年地震勘探市场调研报告
- 2025秋教科版(2024)小学科学三年级上册期中试卷(附参考答案)
- 餐饮服务标准操作流程SOP模板
- 新解读(2025)《HG-T 3985-2007聚四氟乙烯波纹管膨胀节》
- 勘察设计安全管理计划及保证措施
- 2025中考数学复习之挑战压轴题-图形的相似
- 教师专业成长路径规划与执行方案
- 2025四川广元市社会化选聘新兴领域党建工作专员28人考试参考试题及答案解析
- 工地消防常识培训课件
- 酒店特色菜品推广方案
评论
0/150
提交评论