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