全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福特新探险者安全测试题及答案解析
- 2025-2030绿色建筑行业政策推动与市场接受度调研报告
- 2025-2030绿色建筑技术推广障碍分析与政策扶持建议研究报告
- 2025-2030绿色建筑产业发展政策与市场渗透率预测报告
- 2025-2030绿色包装材料生命周期评估报告
- 和田企业安全培训考试题及答案解析
- 2025-2030细胞治疗产品商业化生产瓶颈与CDMO合作模式研究
- 2025-2030纳米药物递送系统临床转化难题与创新药企布局报告
- 2025-2030纳米材料在传感器领域应用突破与产业化障碍分析
- 2025-2030纳米光刻设备行业质量管控体系与标准认证分析报告
- 中式婚宴餐台设计
- 2024年中级经济师经济基础考试11月17日下午场真题及答案
- GB/T 46511-2025食品数字化工厂通用技术要求
- 会所股权转让合同范本
- 重疾险课件教学课件
- 2025江苏苏州市姑苏区劳动人事争议仲裁院协理员招聘5人考试模拟试题及答案解析
- 2025四川广元市社会化选聘新兴领域党建工作专员28人考试参考试题及答案解析
- 2025年传统医学师承人员出师和确有专长人员考核考试测试题及答案
- 2026年中国工商银行陕西省分行校园招聘(520人)考试参考试题及答案解析
- 北师大版四年级上册数学第二单元作业设计
- 新生儿麻醉(湖北省麻醉年会)
评论
0/150
提交评论