張亮
摘要:基于Android操作系統(tǒng)的智能手機(jī)目前在市場(chǎng)上的占有率排名第一,然而,Android系統(tǒng)官方并沒(méi)有提供定時(shí)自動(dòng)開(kāi)關(guān)機(jī)的功能,并且,很多品牌的Android手機(jī)并不具備關(guān)機(jī)鬧鐘功能,因此,很多人使用打開(kāi)飛行模式來(lái)取代關(guān)機(jī)操作。該文介紹了一種編程方法,可以根據(jù)設(shè)定的時(shí)間自動(dòng)打開(kāi)或關(guān)閉飛行模式,在一定程度上可以解決對(duì)自動(dòng)開(kāi)關(guān)機(jī)功能的需求。
關(guān)鍵詞:Android;飛行模式;編程
中圖分類號(hào):TN929 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2012)32-7743-02
Android操作系統(tǒng)是Google公司于2007年發(fā)布的一種智能手機(jī)操作平臺(tái),它是一個(gè)由操作系統(tǒng)、中間件、用戶友好界面和應(yīng)用軟件組成的,全面整合的移動(dòng)軟件平臺(tái)。自推出以來(lái),Android受到了業(yè)界的廣泛關(guān)注,基于Android的智能手機(jī)的發(fā)展也極其迅猛,目前在智能手機(jī)的市場(chǎng)占有率已經(jīng)穩(wěn)居第一。然而遺憾的是,Android系統(tǒng)并沒(méi)有提供定時(shí)自動(dòng)開(kāi)關(guān)機(jī)功能,因此,習(xí)慣夜晚關(guān)機(jī)的用戶必須每日晚上手動(dòng)進(jìn)行關(guān)機(jī)操作,次日早晨再手動(dòng)開(kāi)機(jī),比較繁瑣。另外,很多廠商開(kāi)發(fā)的基于Android系統(tǒng)的手機(jī)并不支持關(guān)機(jī)鬧鐘功能,一旦關(guān)機(jī)后,設(shè)定的鬧鐘就不再起作用,給用戶帶來(lái)很多不便。因此,越來(lái)越多的用戶目前傾向使用啟用飛行模式來(lái)代替關(guān)機(jī)操作,因?yàn)樵陲w行模式下,鬧鐘是可用的。但系統(tǒng)同樣沒(méi)有提供定時(shí)自動(dòng)開(kāi)關(guān)飛行模式的設(shè)置選項(xiàng),該文的目的就是介紹如何自主編程開(kāi)發(fā)這一功能。
1飛行模式簡(jiǎn)介
手機(jī)的飛行模式又叫航空模式、航班模式。飛行模式打開(kāi)后,將關(guān)閉手機(jī)的通信功能,即不能接打電話發(fā)短信,與基站沒(méi)有信號(hào)聯(lián)系,也不試圖聯(lián)系基站。同時(shí)手機(jī)的移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)和WIFI模塊也會(huì)被關(guān)閉。因?yàn)槭謾C(jī)信號(hào)會(huì)干擾飛機(jī)上的電子設(shè)備,所以飛機(jī)上不允許打開(kāi)手機(jī),而在飛行模式下關(guān)閉了手機(jī)信號(hào)的有關(guān)功能,手機(jī)可以開(kāi)著繼續(xù)使用其它功能,如查看電話本、欣賞手機(jī)上的文章、電影等。所以叫這種模式被稱為飛行模式。因?yàn)槭謾C(jī)的電量很大部分都消耗在無(wú)線信號(hào)通信上,飛行模式下關(guān)閉了所有無(wú)線信號(hào)通信,因此非常省電。
2代碼實(shí)現(xiàn)
本系統(tǒng)手機(jī)客戶端開(kāi)發(fā)環(huán)境為Android2.3,采用JDK1.6版和Eclipse3.7來(lái)編程實(shí)現(xiàn)。
代碼主要由兩個(gè)類組成:AirplaneModeSwitchActivity類和AlarmReceiver類。其中AirplaneModeSwitchActivity類是Activity類的子類,用來(lái)實(shí)現(xiàn)程序主界面,主要用來(lái)設(shè)置定時(shí)開(kāi)關(guān)的時(shí)間和啟動(dòng)關(guān)閉程序等功能。AlarmReceiver類是BroadcastReceiver類的子類,主要用來(lái)響應(yīng)AlarmManager發(fā)出的廣播intent,并執(zhí)行打開(kāi)或關(guān)閉飛行模式的代碼。
由于打開(kāi)和關(guān)閉飛行模式的代碼流程幾乎一致,下面以打開(kāi)飛行模式為例介紹一下具體的編程步驟:
1)在主界面上設(shè)置TimePicker控件來(lái)設(shè)置打開(kāi)飛行模式的時(shí)間。TimePicker繼承了FrameLayout類,可以向用戶顯示一天中的時(shí)間(可以為24小時(shí),也可以為AM/PM制),并允許用戶進(jìn)行選擇。
2)通過(guò)GregorianCalendar類的默認(rèn)構(gòu)造方法取得當(dāng)前系統(tǒng)的時(shí)間,并利用當(dāng)前時(shí)間的年月日加上TimePicker控件中設(shè)置的小時(shí)和分鐘構(gòu)造出打開(kāi)飛行模式的時(shí)間。需要特別注意的是,此時(shí)需要比較此時(shí)間和當(dāng)前系統(tǒng)時(shí)間的先后,如何當(dāng)前系統(tǒng)時(shí)間已經(jīng)晚于此時(shí)間,說(shuō)明用戶設(shè)置的是第二天這個(gè)時(shí)候自動(dòng)打開(kāi)飛行模式,因此需要將此時(shí)間的日期加1。
3)設(shè)置Intent和PendingIntent對(duì)象,Intent一般是用作Activity、Sercvice、BroadcastReceiver之間傳遞數(shù)據(jù),PendingIntent可以看作是對(duì)Intent的包裝,通常通過(guò)getActivity,getBroadcast,getService來(lái)得到pendingintent的實(shí)例,當(dāng)前activity并不能馬上啟動(dòng)它所包含的intent,而是在外部執(zhí)行pendingintent時(shí),來(lái)調(diào)用封裝的intent的。我們這里設(shè)置的Intnent指向AlarmReceiver類,用來(lái)當(dāng)AlarmManager設(shè)定時(shí)間到達(dá)的時(shí)候發(fā)出廣播。
4)設(shè)置AlarmManager對(duì)象。AlarmManager的作用是:在特定的時(shí)刻為我們廣播一個(gè)指定的Intent。簡(jiǎn)單的說(shuō)就是我們?cè)O(shè)定一個(gè)時(shí)間,然后在該時(shí)間到來(lái)時(shí)候,AlarmManager為我們廣播一個(gè)我們?cè)O(shè)定的Intent。我們通過(guò)該對(duì)象的setRepeating方法來(lái)設(shè)置一個(gè)重復(fù)的定時(shí)器,重復(fù)時(shí)間為24小時(shí),也就是每天相同的時(shí)間打開(kāi)飛行模式。需要注意的是,我們開(kāi)始時(shí)嘗試使用Timer定時(shí)器類來(lái)實(shí)現(xiàn)相同的功能,但經(jīng)過(guò)實(shí)踐發(fā)現(xiàn),Timer類定時(shí)器在手機(jī)進(jìn)入待機(jī)狀態(tài)時(shí)就不再起作用,因此不適合用在這樣的場(chǎng)合使用。
5)當(dāng)定時(shí)器發(fā)出廣播后,由AlarmReceiver類負(fù)責(zé)處理。要實(shí)現(xiàn)這一點(diǎn),必須在項(xiàng)目的AndroidManifest.xml文件中加入
3結(jié)束語(yǔ)
Android系統(tǒng)作為目前最為流行的智能手機(jī)操作系統(tǒng),在各方面的性能都比較優(yōu)秀,然而,缺乏對(duì)自動(dòng)開(kāi)關(guān)機(jī)功能和關(guān)機(jī)鬧鐘功能的支持是一大遺憾。該文分析飛行模式的原理,探討了用飛行模式取代關(guān)機(jī)的可能性,并給出了實(shí)現(xiàn)定時(shí)自動(dòng)開(kāi)關(guān)飛行模式的代碼實(shí)現(xiàn),希望對(duì)Android系統(tǒng)的研究產(chǎn)生一定的參考作用。
參考文獻(xiàn):
[1]郭蕊.基于Android平臺(tái)的GPS定位系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].北京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2012,11(2).
[2]倪紅軍.基于Android平臺(tái)的移動(dòng)終端GPS研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012(5).
[3]百度百科.GPS工作原理[EB/OL].http://baike.baidu.com/view/7773.htm.