当前位置:编程学习 > wap >>

手机关机后,闹钟如何自己启动?

高手请指教:
    很多手机都有这样的功能:手机关机后,闹钟到时间会自启动,振铃,然后问你是否要启动手机。不知道该功能是如何实现的?很是迷惘!! --------------------编程问答-------------------- 通过alarm的机制即可 --------------------编程问答-------------------- 你的手机要支持RTC才行的。也就是关机后有个自己计时的硬件支持。 --------------------编程问答--------------------
引用 1 楼 wireless_com 的回复:
通过alarm的机制即可

大哥,能否说得清楚点!!我看BMP的API,跟Alarm有关的就那个IAlarmMgr了,你说的alarm机制太笼统了,我该看哪方面的资料?给指条明路吧 --------------------编程问答--------------------
引用 2 楼 sunyymq 的回复:
你的手机要支持RTC才行的。也就是关机后有个自己计时的硬件支持。

我也知道,要有硬件支持。现在我只是在模拟器上跑。 --------------------编程问答-------------------- 难道IALARMMGR_SetAlarm() 不工作么? --------------------编程问答-------------------- 原理是这样的:

假如闹钟需要在早上8点钟响

手机关机时计算一下需要自动开机的时间,
换算成tick值
减去关机+开机所需的时间

写入手机的RTC,rtc 检测 tick值 到时是启动手机,
手机启动后 闹铃检测也会启动,
这个时候去查到 8点有闹钟,
闹钟响。。。。

幸好俺干过硬件。不过不知道brew咋办的。没看到过相关的代码 --------------------编程问答-------------------- 提示你是否启动手机时,手机已经起来了,是询问你是否要关手机,
--------------------编程问答--------------------
引用 5 楼 wireless_com 的回复:
难道IALARMMGR_SetAlarm() 不工作么?

关键是IAlarmMgr有关的接口函数都是上层的,一旦手机关机,applet关闭,它们肯定就不起作用了。 --------------------编程问答--------------------
引用 6 楼 comicray 的回复:
原理是这样的:

假如闹钟需要在早上8点钟响

手机关机时计算一下需要自动开机的时间,
换算成tick值
减去关机+开机所需的时间

写入手机的RTC,rtc 检测 tick值 到时是启动手机,
手机启动后 闹铃检测也会启动,
这个时候去查到 8点有闹钟,
闹钟响。。。。

幸好俺干过硬件。不过不知道brew咋办的。没看到过相关的代码

难道是手机启动后,才去检测是否有闹钟的?不明白啊!那么有人明白手机如何自启动吗? --------------------编程问答-------------------- 模拟器的话你就放弃吧,模拟器你如何做到关机闹钟?手机是关机后自己有一个计数器,到了设定的时间会触发中断,中断来了之后开始跑开机流程。 --------------------编程问答--------------------
引用 9 楼 wyl_stream 的回复:
引用 6 楼 comicray 的回复:
原理是这样的:

假如闹钟需要在早上8点钟响

手机关机时计算一下需要自动开机的时间,
换算成tick值
减去关机+开机所需的时间

写入手机的RTC,rtc 检测 tick值 到时是启动手机,
手机启动后 闹铃检测也会启动,
这个时候去查到 8点有闹钟,
闹钟响。。。。

幸好俺干过硬件。不过不知道brew咋办的。没看到过相关的代码

难道是手机启动后,才去检测是否有闹钟的?不明白啊!那么有人明白手机如何自启动吗?


手机都没启动,怎么检测闹钟啊?
现在的手机都强调省电,关机肯定会切断电源的
关机了检查耗纽扣电池的点还得了啊

闹铃检测肯定是开机了之后的事情
开机不点屏,后台干啥用户都不知道

讲个笑话啊:
xx手机内存泄露无法解决,导致手机长期不关机的话很容易内存耗尽,手机内的代码对申请内存的异常处理又很烂,最后采用一个终极方案解决:
假如手机使用了x小时并且在idle界面屏保了,后台偷偷重启一下
--------------------编程问答-------------------- 楼上你说的是开机闹钟,关机闹钟估计你没搞过。。。。。 去了解一下吧! --------------------编程问答-------------------- 感觉要用计时器,timer来实现吧 --------------------编程问答--------------------
引用 12 楼 sunyymq 的回复:
楼上你说的是开机闹钟,关机闹钟估计你没搞过。。。。。 去了解一下吧!


俺说的就是关机闹钟啊
见6楼 --------------------编程问答-------------------- 模拟器就算了,都说了模拟了,有必要折腾这么深吗,关机,BREW都关了,还怎么BREW API。省点力气做点真机来的实在 --------------------编程问答-------------------- Brew MP 给出的模拟器是支持闹钟的关机启动的,高通给的SAS例子就实现了闹钟的开机启动。从目前我看得资料来看,好像IAlarmMgr的接口可以实现这一功能。可现在还不知道如何实现,呵呵 --------------------编程问答-------------------- 你把模拟器关了看看能不能。。。。 昏倒。SAS是OEM才有的。也同样需要硬件支持才能实现的。除非你不关机。 --------------------编程问答--------------------
引用 17 楼 sunyymq 的回复:
你把模拟器关了看看能不能。。。。 昏倒。SAS是OEM才有的。也同样需要硬件支持才能实现的。除非你不关机。

你说对了,呵呵。我试过了,确实simulator不可以关掉。我现在试的,关掉applet的话,铃声还是可以响的。 --------------------编程问答-------------------- 关注~ --------------------编程问答-------------------- BREW本身的接口不支持,要实现关机闹钟需要两个条件:
1. 手机支持RTC,也就是关机有电池供电使RTC保持运行
2. 将Alarm设到RTC中,这个IAlarmMgr是不支持的,有一个接口叫做IAlarm,它对应的OEM实现函数里面有一个叫IAlarm_SetAlarm,你可以在这个函数中会调用pm_rtc_alarm_rw_cmd去读写RTC中的Alarm。成功设置RTC中Alarm后,在关机状态下,该Alarm到期便会把手机唤醒。

这个功能我在6K系列上做过,需要注意的时,6K系列(或者说6270更合适)的RTC只支持一个Alarm,但是BREW却支持多个alarm。 --------------------编程问答-------------------- BMP上我没有试过,可以确定的是HDK的simulator是无法实现闹铃开机的 --------------------编程问答-------------------- 刚刚发现上面写错了,20楼中的IAlarm_SetAlarm应该是OEMAlarm_SetAlarm --------------------编程问答--------------------
引用 20 楼 sunwei06292000 的回复:
BREW本身的接口不支持,要实现关机闹钟需要两个条件:
1. 手机支持RTC,也就是关机有电池供电使RTC保持运行
2. 将Alarm设到RTC中,这个IAlarmMgr是不支持的,有一个接口叫做IAlarm,它对应的OEM实现函数里面有一个叫IAlarm_SetAlarm,你可以在这个函数中会调用pm_rtc_alarm_rw_cmd去读写RTC中的Alarm。成功设置RTC中Alarm后,在关机状态下,该Alarm到期便会把手机唤醒。

这个功能我在6K系列上做过,需要注意的时,6K系列(或者说6270更合适)的RTC只支持一个Alarm,但是BREW却支持多个alarm。

谢谢你的回复!现在只能用IAlarmMgr先做着,先调查清楚,以后再改吧。
貌似IAlarmMgr接口不支持闹钟的开机启动。我刚用Brew MP没多久,对OEM不甚了解,你说的OEM实现函数,是要自己写还是高通会提供给我们?
--------------------编程问答-------------------- 要设置开机启动一个后台程序应该怎么办.新手学习BREW
借帖,谢谢 --------------------编程问答-------------------- 关机闹钟就是RTC的时间到了,会启动手机,跑开机流程

当然关机闹钟来的开机流程可以和一般的开机流程不一样

跑完开机流程画闹钟界面

就是这样 --------------------编程问答-------------------- 很透彻了,完成 --------------------编程问答--------------------
引用 23 楼 wyl_stream 的回复:
引用 20 楼 sunwei06292000 的回复:
BREW本身的接口不支持,要实现关机闹钟需要两个条件:
1. 手机支持RTC,也就是关机有电池供电使RTC保持运行
2. 将Alarm设到RTC中,这个IAlarmMgr是不支持的,有一个接口叫做IAlarm,它对应的OEM实现函数里面有一个叫IAlarm_SetAlarm,你可以在这个函数中会调用pm_rtc_alarm_rw_cmd……

OEM层的代码和部份用于AEE层debug的代码,如果不是做OEM的话,估计要问高通提供 --------------------编程问答-------------------- 设完RTC之后,关机。
等关机闹钟到时,会自动唤醒手机,在启动过程中,会得到开机原因是ALarm,然后Idle应用走ALarm流程,所以会显示闹钟界面,并提示用户是否开机(此时实际已经开机,只是没到Idle界面而已) --------------------编程问答--------------------
引用 20 楼 sunwei06292000 的回复:
BREW本身的接口不支持,要实现关机闹钟需要两个条件:
1. 手机支持RTC,也就是关机有电池供电使RTC保持运行
2. 将Alarm设到RTC中,这个IAlarmMgr是不支持的,有一个接口叫做IAlarm,它对应的OEM实现函数里面有一个叫IAlarm_SetAlarm,你可以在这个函数中会调用pm_rtc_alarm_rw_cmd去读写RTC中的Alarm。成功设置RTC中Alarm后,……


RTC支持一个闹钟足够了。多个闹钟是APP实现的。关机时闹钟时间到了后,RTC中断处罚闹钟开机,启动APP后把下一个最近的闹钟时间(也有可能用户按延时的结果)设置到RTC就可以了。
总之,闹钟响的时候,实际上已经开机了。
这样就可以实现任意多个闹钟了。 --------------------编程问答-------------------- 具体不懂,我的了解是这样的。
首先 关机闹钟, 并不是真正的关机,实际上是一种状态的待机,大部分是硬件RTC晶振来支持的,如果到闹钟时间,RTC发上来个消息,走闹钟开机流程(不是正常开机流程)。
补充:移动开发 ,  Brew
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,