亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Android平臺預置GMS包后關機鬧鐘失效問題及解決方法

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

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中。

@@ -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后,發現接受該廣播需要在應用中添加特定的權限,即'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包關機鬧鐘失效內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: 国产午夜高清一区二区不卡 | 中文字幕日韩欧美一区二区三区 | 国产免费福利网站 | 国产v国产v片大片线观看网站 | 久久国产在线视频 | 亚洲黑人巨大videos0 | 999久久久精品视频在线观看 | 国产在线视频资源 | 久草综合在线观看 | 草草影院地址ccyycom浮力影院37 草草影院欧美 | 免费在线看黄视频 | 国产精品一区二区免费福利视频 | 最新永久一路线二路线三路线 | 国产精品亚洲午夜一区二区三区 | 中文在线免费不卡视频 | 久久国产精品免费网站 | 一级毛片黄色片 | 国产丁香婷婷妞妞基地 | 国产三级自拍视频 | 国产一级片在线播放 | 高h猛烈做哭bl壮汉受小说 | 华人在线视频 | 色网站综合 | xxxxx18日本人hdxx | 日韩不卡在线 | 久久久久久91香蕉国产 | 伊人久久久久久久久香港 | 品爱网在线观看视频免费视频 | 国产色婷婷精品综合在线 | 97视频久久| 国产精品久久久久久久毛片 | 久青草国产观看在线视频 | 色婷婷亚洲五月色综合色 | 国产网站免费在线观看 | 国产毛片一区二区三区精品 | 一区二区亚洲精品 | 一线高清视频在线观看www国产 | 一级做α爱毛毛片 | 一级做a爰片久久毛片欧美 一级做a爰片久久毛片图片 | 久久99视频精品 | 免费网站观看 |