劉 彬 楊文暉
(成都理工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,四川 成都 610059)
安卓操作系統(tǒng)已成為智能手機的主流操作系統(tǒng)之一。帶來方便時也帶了了一些問題,有時我們不得不選擇關(guān)機,而關(guān)機就有啟動的問題。本文探索一種基于Android平臺的一種解解決手機關(guān)機后的根據(jù)預(yù)設(shè)時間自動啟動的問題的決方案來,以此來實現(xiàn)生活中手機啟動的自動化問題。同時,這也為鬧鐘功能的實現(xiàn)提供了另一種實現(xiàn)方式。
Android或者iOS等智能系統(tǒng)都是由BP和AP兩部分組成,其中BP負(fù)責(zé)硬件啟動,通訊模塊等部分,而AP是智能系統(tǒng)OS和上面的應(yīng)用所需要的。而其大部分邏輯處理,包括鬧鐘都是由AP控制的,AP本身可以看為一個PC,那么一旦關(guān)機,肯定是無法運行應(yīng)用,從而也就無法進(jìn)行鬧鐘的觸發(fā).主要思考一下幾種方案:
(1)在BP層掛接特殊模塊能夠和AP相關(guān)驅(qū)動配合一起設(shè)置鬧鐘觸發(fā)點,也就是說,當(dāng)開機時設(shè)置的鬧鐘同時被設(shè)置到AP層,這樣當(dāng)關(guān)機情況下,當(dāng)接近鬧鐘觸發(fā)點時啟動AP來進(jìn)行相應(yīng)的鬧鐘處理。
(2)做假關(guān)機,實際上是進(jìn)入待機休眠模式,這樣當(dāng)然鬧鐘應(yīng)用可以正常工作。不好的是因為沒有實際關(guān)機,會增加耗電。
(3)完全在BP層處理鬧鐘行為,AP層設(shè)置好后,BP層檢測到AP層關(guān)機狀態(tài)時直接處理鬧鐘事件和相應(yīng)反應(yīng)。不過這樣的壞處是要在BP層實現(xiàn)非常類似AP層鬧鐘的界面,否則會導(dǎo)致界面不統(tǒng)一。
通過以上的三種比較,選擇了第一種辦法,考慮到Android自動開機要用到底層rtc時鐘的支持,所以必須從Android的內(nèi)核來尋求解決辦法。
利用Android手機中的BroadcastReceiver,這樣一個廣播接收機制來實現(xiàn)。自定義的ACTION_REQUEST_POWER_OFF:設(shè)置auto power off時,通過AlarmManager設(shè)置的一個RTC_WAKEUP時鐘。當(dāng)?shù)皆O(shè)置的關(guān)機時間時,之前設(shè)置到AlarmManager的這個action會被廣播。我們實現(xiàn)的這個BroadcastReceiver接收到這個消息后,就要開始power off流程。當(dāng)用戶設(shè)置自動關(guān)機的時候,我設(shè)置了2個時鐘,一個是RTC時鐘,用于關(guān)機狀態(tài)下開機;還有一個就是這個RTC_WAKEUP時鐘。這個時鐘用于接收信息重置開機時鐘。
一個處理power off的Service,當(dāng)BroadcastReceiver接收到ACTION_REQUEST_POWER_OFF,我們給用戶一個機會去取消當(dāng)前的自動關(guān)機。這個Service的作用就是啟動一個無背景的頁面,給用戶提示.同時播放之前用戶設(shè)置的提示音或振動。
一個Activity:顯示一個dialog提示用戶要自動關(guān)機,并用一個計時器倒計時。當(dāng)用戶確認(rèn)關(guān)機,或者計時器到時間的時候,就關(guān)機。否則取消當(dāng)前關(guān)機,并重設(shè)下次自動關(guān)機alarm。
設(shè)置自動關(guān)機的alarm:
圖1 Android內(nèi)核架構(gòu)圖
在系統(tǒng)power off狀態(tài)下自動開機,設(shè)置一個rtc時鐘,當(dāng)用戶設(shè)置自動開機,由AlarmManagerService將時鐘設(shè)置下去。這要底層支持,Android內(nèi)核(圖1)肩負(fù)著整個Android平臺的設(shè)備驅(qū)動,Android內(nèi)核可供添加或修改的文件很多。這里的實現(xiàn)是定義一個我們自己的rtc_alarm_type。此處我們用到的內(nèi)核是從google source上下載的linux-2.6.23-android,利用Linux環(huán)境對其進(jìn)行內(nèi)核編譯。找到內(nèi)核中的linux/android_alarm.h在頭文件里面定義:
設(shè)定時間分別為19:22,19:30。啟動時間如下(圖2):
圖2
本文基于Android系統(tǒng)對智能手機進(jìn)行自動啟動問題進(jìn)行了設(shè)計,通過測試實現(xiàn)了Android系統(tǒng)手機根據(jù)預(yù)設(shè)定時間自動啟動的問題。這對于基于Android系統(tǒng)的手機增加了用戶的體驗性。隨著智能手機的發(fā)展必將被增加到手機的功能群中。
[1]趙啟明.ANDROID典型技術(shù)模塊開發(fā)詳解[M].中國鐵道出版社,2012.
[2]貢知洲.Android發(fā)展的分析與研究[J].金陵科技學(xué)院龍蟠學(xué)院,2013.
[3]韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點詳解[M].電子工業(yè)出版社,2010.
[4]王冰.Android系統(tǒng)內(nèi)核剖析[J].中國科技博覽,2013,33.