电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android平臺(tái)預(yù)置GMS包后關(guān)機(jī)鬧鐘失效問(wèn)題及解決方法

瀏覽:26日期:2022-09-22 15:51:34

1.介紹

關(guān)機(jī)鬧鐘為Android中默認(rèn)支持的功能,實(shí)現(xiàn)起來(lái)則需要滿足一定的條件:自動(dòng)開(kāi)機(jī)、開(kāi)機(jī)后響鈴。對(duì)于自動(dòng)開(kāi)機(jī)來(lái)說(shuō),自動(dòng)關(guān)機(jī)可以在應(yīng)用層通過(guò)設(shè)置alarm來(lái)實(shí)現(xiàn),而自動(dòng)開(kāi)機(jī)需要底層rtc時(shí)鐘的支持;開(kāi)機(jī)后檢查時(shí)間,到點(diǎn)響鈴。

2.原理

一般智能手機(jī)的硬件架構(gòu)都是分為RF,BB,AP這三個(gè)部分, RF射頻部分的功能主要是接收和發(fā)射射頻,大家不用關(guān)注這個(gè)。而AP部分就是應(yīng)用程序處理器,其實(shí)也就是CPU模塊;BB部分則是基帶模塊。通常手機(jī)關(guān)機(jī)都是AP模塊完全斷電,而B(niǎo)B雖然處在關(guān)機(jī)狀態(tài),但實(shí)際上鬧鐘和時(shí)間部分并沒(méi)有斷電。而當(dāng)所設(shè)置鬧鐘到點(diǎn)時(shí)BB模塊會(huì)自動(dòng)給AP模塊上電,這樣系統(tǒng)也就能開(kāi)機(jī)并激活鬧鐘功能了。

3.流程

在鬧鐘設(shè)置一個(gè)時(shí)間合適且有效響鈴的鬧鐘后,向PowerOffAlarm發(fā)送設(shè)定關(guān)機(jī)鬧鐘廣播并傳入鬧鐘時(shí)間參數(shù),PowerOffAlarm接收到廣播后,根據(jù)預(yù)設(shè)提前開(kāi)機(jī)時(shí)間和鬧鐘時(shí)間往rtc中寫(xiě)入時(shí)間,并將該時(shí)間寫(xiě)入文件中暫存。設(shè)置好鬧鐘后關(guān)機(jī),機(jī)器會(huì)根據(jù)rtc中的alrm_time時(shí)間參數(shù)來(lái)開(kāi)機(jī),開(kāi)機(jī)后AlarmManagerService會(huì)檢查鬧鐘,并在鬧鐘時(shí)間發(fā)送廣播后彈出響鈴界面。點(diǎn)擊關(guān)閉鬧鐘后,會(huì)發(fā)送取消關(guān)機(jī)鬧鐘廣播,PowerOffAlarm會(huì)對(duì)傳入時(shí)間與暫存的時(shí)間對(duì)比,如果相同則會(huì)取消該關(guān)機(jī)鬧鐘。

4.遇到問(wèn)題及解決方法

4.1預(yù)置GMS包后,關(guān)機(jī)鬧鐘失效

在對(duì)比平臺(tái)鬧鐘分析后,發(fā)現(xiàn)谷歌鬧鐘在設(shè)置鬧鐘后并沒(méi)有向PowerOffAlarm發(fā)送廣播,但是由于谷歌鬧鐘無(wú)法進(jìn)行修改。在分析了平臺(tái)的鬧鐘設(shè)置鬧鐘步驟后,發(fā)現(xiàn)在設(shè)置鬧鐘后都會(huì)調(diào)用AlarmManager.setAlarmClock()這個(gè)方法,然后再AlarmStateManager的updateNextAlarm方法中發(fā)送設(shè)置關(guān)機(jī)鬧鐘的廣播。谷歌鬧鐘在設(shè)置鬧鐘也會(huì)調(diào)用AlarmManager.setAlarmClock()這個(gè)方法,所以在該方法中直接發(fā)送廣播到PowerOffAlarm中。

@@ -615,8 +633,34 @@ public class AlarmManager { public void setAlarmClock(AlarmClockInfo info, PendingIntent operation) { setImpl(RTC_WAKEUP, info.getTriggerTime(), WINDOW_EXACT, 0, 0, operation, null, null, null, null, info);+ setPowerOffAlarm(mContext,info.getTriggerTime()); } ++ /*add by hxj at Aug.6,for PowerOffAlarm*/+ private void setPowerOffAlarm(Context context, long time) {+ Log.d(TAG, 'setPowerOffAlarm: saveAlarmToPreference and sendBroadcast to setPowerOffAlarm,the time is '+time);+ DEFAULT_ALARM_TIME = time;+ Intent intent = new Intent(ACTION_SET_POWEROFF_ALARM);+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);+ intent.setPackage(POWER_OFF_ALARM_PACKAGE);+ intent.putExtra(TIME, time);+ context.sendBroadcast(intent);+ }++ private void cancelPowerOffAlarm(Context context) {+ //long time = getAlarmFromPreference(context);+ Log.d(TAG, 'cancelPowerOffAlarm: cancel alarm and cancelPowerOffAlarm(mContext),time is '+DEFAULT_ALARM_TIME );+ Intent intent = new Intent(ACTION_CANCEL_POWEROFF_ALARM);+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);+ intent.putExtra(TIME, DEFAULT_ALARM_TIME);+ intent.setPackage(POWER_OFF_ALARM_PACKAGE);+ context.sendBroadcast(intent);+ DEFAULT_ALARM_TIME = 0L;+ }++ /** @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)@@ -930,6 +974,7 @@ public class AlarmManager { try { mService.remove(operation, null);+ cancelPowerOffAlarm(mContext); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); }

4.2 PowerOffAlarm無(wú)法接收廣播

在分析log后,發(fā)現(xiàn)接受該廣播需要在應(yīng)用中添加特定的權(quán)限,即'org.codeaurora.permission.POWER_OFF_ALARM'權(quán)限,但是由于谷歌鬧鐘中未添加并且無(wú)法修改,所以在PowerOffAlarm中接收管廣播處移除該權(quán)限。

@@ -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 開(kāi)機(jī)時(shí)間過(guò)長(zhǎng)導(dǎo)致開(kāi)機(jī)后鬧鐘過(guò)期

提前開(kāi)機(jī)時(shí)間平臺(tái)預(yù)設(shè)默認(rèn)為90000毫秒,項(xiàng)目中開(kāi)機(jī)時(shí)間較長(zhǎng),所以增長(zhǎng)開(kāi)機(jī)時(shí)間,改為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;

此外還有其他的問(wèn)題也會(huì)導(dǎo)致關(guān)機(jī)鬧鐘的失效,有時(shí)間再來(lái)記錄一下。

總結(jié)

到此這篇關(guān)于Android平臺(tái)預(yù)置GMS包后,關(guān)機(jī)鬧鐘失效的文章就介紹到這了,更多相關(guān)android 預(yù)置GMS包關(guān)機(jī)鬧鐘失效內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 广州云仓代发-昊哥云仓专业电商仓储托管外包代发货服务 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 炉门刀边腹板,焦化设备配件,焦化焦炉设备_沧州瑞创机械制造有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 氢氧化钙设备_厂家-淄博工贸有限公司| 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | 阳光1号桔柚_无核沃柑_柑橘新品种枝条苗木批发 - 苧金网 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 交通信号灯生产厂家_红绿灯厂家_电子警察监控杆_标志杆厂家-沃霖电子科技 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 过滤器_自清洗过滤器_气体过滤器_苏州华凯过滤技术有限公司 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 深圳市万色印象美业有限公司| 气胀轴|气涨轴|安全夹头|安全卡盘|伺服纠偏系统厂家-天机传动 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 微型实验室真空泵-无油干式真空泵-微型涡旋耐腐蚀压缩机-思科涡旋科技(杭州)有限公司 | 飞歌臭氧发生器厂家_水处理臭氧发生器_十大臭氧消毒机品牌 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china |