时间:2021-05-19
1.介绍
关机闹钟为Android中默认支持的功能,实现起来则需要满足一定的条件:自动开机、开机后响铃。对于自动开机来说,自动关机可以在应用层通过设置alarm来实现,而自动开机需要底层rtc时钟的支持;开机后检查时间,到点响铃。
2.原理
一般智能手机的硬件架构都是分为RF,BB,AP这三个部分, RF射频部分的功能主要是接收和发射射频,大家不用关注这个。而AP部分就是应用程序处理器,其实也就是CPU模块;BB部分则是基带模块。通常手机关机都是AP模块完全断电,而BB虽然处在关机状态,但实际上闹钟和时间部分并没有断电。而当所设置闹钟到点时BB模块会自动给AP模块上电,这样系统也就能开机并激活闹钟功能了。
3.流程
在闹钟设置一个时间合适且有效响铃的闹钟后,向PowerOffAlarm发送设定关机闹钟广播并传入闹钟时间参数,PowerOffAlarm接收到广播后,根据预设提前开机时间和闹钟时间往rtc中写入时间,并将该时间写入文件中暂存。
设置好闹钟后关机,机器会根据rtc中的alrm_time时间参数来开机,开机后AlarmManagerService会检查闹钟,并在闹钟时间发送广播后弹出响铃界面。
点击关闭闹钟后,会发送取消关机闹钟广播,PowerOffAlarm会对传入时间与暂存的时间对比,如果相同则会取消该关机闹钟。
4.遇到问题及解决方法
4.1预置GMS包后,关机闹钟失效
在对比平台闹钟分析后,发现谷歌闹钟在设置闹钟后并没有向PowerOffAlarm发送广播,但是由于谷歌闹钟无法进行修改。
在分析了平台的闹钟设置闹钟步骤后,发现在设置闹钟后都会调用AlarmManager.setAlarmClock()这个方法,然后再AlarmStateManager的updateNextAlarm方法中发送设置关机闹钟的广播。
谷歌闹钟在设置闹钟也会调用AlarmManager.setAlarmClock()这个方法,所以在该方法中直接发送广播到PowerOffAlarm中。
4.2 PowerOffAlarm无法接收广播
在分析log后,发现接受该广播需要在应用中添加特定的权限,即"org.codeaurora.permission.POWER_OFF_ALARM"权限,但是由于谷歌闹钟中未添加并且无法修改,所以在PowerOffAlarm中接收管广播处移除该权限。
@@ -29,7 +29,7 @@ android:defaultToDeviceProtectedStorage="true"> <receiver android:name=".PowerOffAlarmBroadcastReceiver"- android:permission="org.codeaurora.permission.POWER_OFF_ALARM"+ android:exported="true" android:directBootAware="true" android:label="PowerOffAlarmBroadcastReceiver">4.3 开机时间过长导致开机后闹钟过期
提前开机时间平台预设默认为90000毫秒,项目中开机时间较长,所以增长开机时间,改为150000毫秒。
@@ -42,7 +42,7 @@ public class PowerOffAlarmUtils { private static final int FAILURE = -1; - public static final long MS_IN_ONE_MIN = 90000L;+ public static final long MS_IN_ONE_MIN = 150000L; private static final long SEC_TO_MS = 1000L;此外还有其他的问题也会导致关机闹钟的失效,有时间再来记录一下。
总结
到此这篇关于Android平台预置GMS包后,关机闹钟失效的文章就介绍到这了,更多相关android 预置GMS包关机闹钟失效内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
华为手机关机后闹钟是否会响动呢?这里为各位小伙伴带来分享,看一下有关关机闹钟的问题,了解是否闹钟会出现问题,还会不会响动,这里为大家带来相关提醒。手机不会自动开
解决方法:补充:idea中yml文件图标小绿叶变成小网格问题及自动提示失效解决方法idea中yml文件图标小绿叶变成小网格问题及自动提示失效解决方法.yml文件
1604错误最终解决方法(iTunesiPhone1604错误解决方法) 出现该问题后将IPHONE关机(POWER+HOME关机),把ITUNES关掉,
电脑关机后自动重启的原因及解决方法MACHINE\SOFTWARE\Microsoft\WindowNT\Currentversion\Winlgon]项目,在
电脑关机后自动重启的原因及解决方法MACHINE\SOFTWARE\Microsoft\WindowNT\Currentversion\Winlgon]项目,在