国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

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

1.介紹

關(guān)機(jī)鬧鐘為Android中默認(rèn)支持的功能,實(shí)現(xiàn)起來則需要滿足一定的條件:自動開機(jī)、開機(jī)后響鈴。對于自動開機(jī)來說,自動關(guān)機(jī)可以在應(yīng)用層通過設(shè)置alarm來實(shí)現(xiàn),而自動開機(jī)需要底層rtc時(shí)鐘的支持;開機(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模塊完全斷電,而BB雖然處在關(guān)機(jī)狀態(tài),但實(shí)際上鬧鐘和時(shí)間部分并沒有斷電。而當(dāng)所設(shè)置鬧鐘到點(diǎn)時(shí)BB模塊會自動給AP模塊上電,這樣系統(tǒng)也就能開機(jī)并激活鬧鐘功能了。

3.流程

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

4.遇到問題及解決方法

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

在對比平臺鬧鐘分析后,發(fā)現(xiàn)谷歌鬧鐘在設(shè)置鬧鐘后并沒有向PowerOffAlarm發(fā)送廣播,但是由于谷歌鬧鐘無法進(jìn)行修改。在分析了平臺的鬧鐘設(shè)置鬧鐘步驟后,發(fā)現(xiàn)在設(shè)置鬧鐘后都會調(diào)用AlarmManager.setAlarmClock()這個(gè)方法,然后再AlarmStateManager的updateNextAlarm方法中發(fā)送設(shè)置關(guān)機(jī)鬧鐘的廣播。谷歌鬧鐘在設(shè)置鬧鐘也會調(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無法接收廣播

在分析log后,發(fā)現(xiàn)接受該廣播需要在應(yīng)用中添加特定的權(quán)限,即'org.codeaurora.permission.POWER_OFF_ALARM'權(quán)限,但是由于谷歌鬧鐘中未添加并且無法修改,所以在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 開機(jī)時(shí)間過長導(dǎo)致開機(jī)后鬧鐘過期

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

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

總結(jié)

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

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 成人午夜免费视频毛片 | 99久久精品无码一区二区毛片 | 欧美视频综合 | 国产午夜精品理论片久久影视 | 免费国产不卡午夜福在线观看 | 日韩不卡在线 | 美女黄色一级毛片 | 国产精品毛片va一区二区三区 | 在线观看视频一区二区三区 | 成人欧美一区在线视频在线观看 | 午夜毛片网站 | 天堂精品高清1区2区3区 | 黄色毛片子 | 新版天堂资源中文8在线 | 日本www免费 | 国产精品香蕉一区二区三区 | 老少配性xxxxxx | 国产精品2019 | 97在线视频免费 | 成人毛片在线 | 性欧美高清come | 亚洲欧美成人综合在线 | 亚洲一区视频在线播放 | 2021国产精品自在拍在线播放 | 亚洲免费观看在线视频 | 一级片免费观看视频 | 国产日本在线视频 | 欧美午夜激情影院 | 天堂在线亚洲 | 国产一级一国产一级毛片 | 99视频久久精品久久 | 欧美日韩高清不卡免费观看 | 国产亚洲精品国产 | 一级毛片美国aaj毛片 | 美女毛片大全 | 亚洲天堂在线视频观看 | 久久国产精品免费视频 | 欧美成人老熟妇暴潮毛片 | 欧美亚洲国产成人不卡 | 日韩亚洲欧美在线 | 成人精品免费视频 |