主動(dòng)觸發(fā)系統(tǒng)廣播的方法與裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種主動(dòng)觸發(fā)系統(tǒng)廣播的方法和裝置。
【背景技術(shù)】
[0002]目前,操作系統(tǒng)如安卓(Android)系統(tǒng)廣泛用于終端設(shè)備,如手機(jī)、平板電腦等之 中。其中,廣播(Broadcast)是在系統(tǒng)組件之間傳播信息的一種機(jī)制,起到進(jìn)程間通信的作 用。應(yīng)用開發(fā)者在開發(fā)應(yīng)用產(chǎn)品的過程中通常需要獲取系統(tǒng)信息,比如網(wǎng)絡(luò)狀態(tài)變化信息、 電池變化信息、系統(tǒng)設(shè)置變化信息等,這類系統(tǒng)信息便是通過廣播提供給應(yīng)用開發(fā)者的。
[0003] 以系統(tǒng)廣播電池變化信息為例進(jìn)行說明,電池變化信息的相關(guān)變量主要包括電 池狀態(tài)Battery Status(如:UNKNOW,CHARGING,DISCHARGING,N0T_CHARGING,F(xiàn)ULL)、電 池狀況Battery Heath(如:UNKNOW,GOOD,OVERHEAT,DEAD,0VER_0VLTAGE,UNSEPCIFIED_ FAILURE,CLOD)、電池電量Battery level、電池電壓Battery Voltage、電池溫度Battery Temperature等。上述變量存放在類BatteryService. java中,其路徑為frameworks/base/ services/java/com/android/server/BatteryService. java。針對(duì)電池變化信息的相關(guān) 處理過程是在BatteryService. java中完成,BatteryService由SystemServer創(chuàng)建,在 系統(tǒng)中提供電池相關(guān)服務(wù),在SystemServer創(chuàng)建BatteryService的構(gòu)造函數(shù)時(shí),會(huì)注冊(cè) 與電池?cái)?shù)據(jù)變化相關(guān)的UEvent事件,當(dāng)電池相關(guān)數(shù)據(jù)發(fā)生變化時(shí),UEvent事件即被觸發(fā), 系統(tǒng)調(diào)用mPowerSupplyObserver的onUEvent函數(shù),在onUEvent函數(shù)中調(diào)用update函 數(shù),再通過JNI調(diào)用native_update函數(shù),從/sys/class/power_supply中讀取電池相關(guān) 數(shù)據(jù),并保存到BatteryService的相關(guān)變量中,隨后調(diào)用processValue函數(shù)通過廣播發(fā) 送電池變化信息發(fā)送至應(yīng)用程序?qū)右怨?yīng)用開發(fā)者使用,與電池變化信息相關(guān)的廣播項(xiàng)目 包括ACTI0N_BATTERY_CHANGED、ACTI0N_P0WER_C0NNECTED、ACTI0N_P0WER_DISC0NNECTED、 ACTI0N_BATTERY_L0W、ACTI0N_BATTERY_0KEY,其中,ACTI0N_BATTERY_CHANGED使用較多。 [0004] 而應(yīng)用開發(fā)者若要獲取系統(tǒng)廣播的電池變化信息,則需要在系統(tǒng)中通過應(yīng)用程 序在Activity組件或者Service組件注冊(cè)BroadcastRecerver,例如,可先通過設(shè)置new BroadcastReceiver對(duì)象,實(shí)現(xiàn)onReceive函數(shù),以完成收到要求監(jiān)聽的廣播后對(duì)廣播數(shù)據(jù) 的處理,然后在onCreate構(gòu)造函數(shù)中進(jìn)行注冊(cè)。當(dāng)應(yīng)用開發(fā)者注冊(cè)BroadcastRecerver之 后,便可通過BroadcastRecerver獲取系統(tǒng)廣播的相關(guān)信息。
[0005] 然而,通過上述方式只能被動(dòng)獲取系統(tǒng)廣播的信息,也就是說,只有系統(tǒng)發(fā)出廣播 時(shí),應(yīng)用開發(fā)者才能獲取到相關(guān)信息,而系統(tǒng)未發(fā)出廣播時(shí),應(yīng)用開發(fā)者則不能主動(dòng)觸發(fā)系 統(tǒng)發(fā)出廣播。因此,上述方式無法滿足應(yīng)用開發(fā)者想主動(dòng)獲取系統(tǒng)廣播的信息的需求。
【發(fā)明內(nèi)容】
[0006] 有鑒于此,本發(fā)明提供一種主動(dòng)觸發(fā)系統(tǒng)廣播的方法及裝置,以滿足用戶主動(dòng)獲 取系統(tǒng)廣播信息的需求。
[0007] 具體地,本發(fā)明的一實(shí)施例提供一種主動(dòng)觸發(fā)系統(tǒng)廣播的方法,該方法包括在數(shù) 據(jù)庫中設(shè)置監(jiān)聽對(duì)象;監(jiān)聽所述監(jiān)聽對(duì)象;以及當(dāng)所述監(jiān)聽對(duì)象的值發(fā)生變化時(shí),發(fā)出廣 播。
[0008] 優(yōu)先地,所述在數(shù)據(jù)庫中設(shè)置監(jiān)聽對(duì)象包括增加與系統(tǒng)信息相關(guān)的字段作為所述 監(jiān)聽對(duì)象,其中,所述系統(tǒng)信息包括網(wǎng)絡(luò)狀態(tài)變化信息、電池變化信息或者系統(tǒng)設(shè)置變化信 息。
[0009] 優(yōu)選地,所述監(jiān)聽所述監(jiān)聽對(duì)象包括:創(chuàng)建內(nèi)容觀察者;以及所述內(nèi)容觀察者監(jiān) 聽所述監(jiān)聽對(duì)象。
[0010] 優(yōu)選地,在處理所述系統(tǒng)信息的服務(wù)組件中監(jiān)聽所述監(jiān)聽對(duì)象。
[0011]優(yōu)選地,所述服務(wù)組件包括ConnectivityService或者BatteryService。
[0012] 優(yōu)選地,所述數(shù)據(jù)庫為Settings數(shù)據(jù)庫。
[0013] 優(yōu)選地,所述方法還包括:設(shè)置允許寫所述數(shù)據(jù)庫中的數(shù)據(jù)的權(quán)限;以及修改所 述監(jiān)聽對(duì)象的值以觸發(fā)所述廣播。
[0014] 優(yōu)選地,所述方法還包括:注冊(cè)廣播接受者以接收所述廣播。
[0015] 本發(fā)明的一實(shí)施例提供一種主動(dòng)觸發(fā)系統(tǒng)廣播的裝置,該裝置包括:監(jiān)聽對(duì)象設(shè) 置模塊,用于在數(shù)據(jù)庫中設(shè)置監(jiān)聽對(duì)象;監(jiān)聽模塊,用于監(jiān)聽所述監(jiān)聽對(duì)象;以及廣播模 塊,用于當(dāng)所述監(jiān)聽對(duì)象的值發(fā)生變化時(shí)發(fā)出廣播。
[0016] 優(yōu)選地,所述監(jiān)聽對(duì)象設(shè)置模塊包括字段增加模塊,用于增加與系統(tǒng)信息相關(guān)的 字段作為所述監(jiān)聽對(duì)象,其中,所述系統(tǒng)信息包括網(wǎng)絡(luò)狀態(tài)變化信息、電池變化信息或者系 統(tǒng)設(shè)置變化信息。
[0017] 優(yōu)選地,所述監(jiān)聽模塊包括創(chuàng)建模塊,用于創(chuàng)建內(nèi)容觀察者,以由所述內(nèi)容觀察者 監(jiān)聽所述監(jiān)聽對(duì)象。
[0018] 優(yōu)選地,所述監(jiān)聽模塊進(jìn)一步用于在處理所述系統(tǒng)信息的服務(wù)組件中監(jiān)聽所述監(jiān) 聽對(duì)象。
[0019] 優(yōu)選地,所述裝置還包括:權(quán)限設(shè)置模塊,用于設(shè)置允許寫所述數(shù)據(jù)庫中的數(shù)據(jù)的 權(quán)限;以及修改模塊,用于修改所述監(jiān)聽對(duì)象的值以觸發(fā)所述廣播。
[0020] 優(yōu)選地,所述裝置還包括注冊(cè)模塊,用于注冊(cè)廣播接受者以接收所述廣播。
[0021] 由于本發(fā)明實(shí)施例所提供的主動(dòng)觸發(fā)系統(tǒng)廣播的方法及裝置通過在數(shù)據(jù)庫中設(shè) 置監(jiān)聽對(duì)象,監(jiān)聽該監(jiān)聽對(duì)象,當(dāng)該監(jiān)聽對(duì)象的值發(fā)生變化時(shí),系統(tǒng)便發(fā)出廣播,因此,當(dāng)用 戶想要獲取相關(guān)系統(tǒng)信息時(shí),只要通過系統(tǒng)界面修改數(shù)據(jù)庫中的監(jiān)聽對(duì)象的值,便可主動(dòng) 觸發(fā)系統(tǒng)發(fā)出相關(guān)系統(tǒng)信息的廣播,簡(jiǎn)單方便。
[0022] 為使本發(fā)明的上述技術(shù)方案和優(yōu)點(diǎn)能更明顯易懂,下文特舉實(shí)施例,并結(jié)合附圖 詳細(xì)說明如下。
【附圖說明】
[0023]圖1是本發(fā)明的第一實(shí)施例所提供的一種主動(dòng)觸發(fā)系統(tǒng)廣播的方法的流程示意 圖。
[0024] 圖2是圖1所示的主動(dòng)觸發(fā)系統(tǒng)廣播的方法的一步驟的主要子步驟流程示意圖。
[0025]圖3是圖1所示的主動(dòng)觸發(fā)系統(tǒng)廣播的方法的進(jìn)一步步驟的流程示意圖。
[0026]圖4是本發(fā)明的第二實(shí)施例所提供的一種主動(dòng)觸發(fā)系統(tǒng)廣播的裝置的結(jié)構(gòu)框圖。
[0027] 圖5是本發(fā)明所提供的一實(shí)例的應(yīng)用環(huán)境示意圖。
【具體實(shí)施方式】
[0028] 為更進(jìn)一步闡述本發(fā)明為達(dá)成預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合 附圖及較佳實(shí)施例,對(duì)依據(jù)本發(fā)明提出的【具體實(shí)施方式】、方法、步驟、結(jié)構(gòu)、特征及功效,進(jìn) 行詳細(xì)說明。
[0029] 本發(fā)明的實(shí)施例所提供的主動(dòng)觸發(fā)系統(tǒng)廣播的方法及裝置主要用于終端設(shè)備的 操作系統(tǒng)之中。所述終端設(shè)備包括手機(jī)、平板電腦、個(gè)人電腦等,所述操作系統(tǒng)例如可以是 安卓系統(tǒng)。
[0030] 第一實(shí)施例
[0031] 第一實(shí)施例提供一種主動(dòng)觸發(fā)系統(tǒng)廣播的方法,該方法適用于一操作系統(tǒng)。圖1 所示為上述方法的流程示意圖。請(qǐng)參考圖1,本實(shí)施例的方法包括以下步驟:
[0032] 步驟SI1,在數(shù)據(jù)庫中設(shè)置監(jiān)聽對(duì)象;
[0033] 在本步驟中,在系統(tǒng)的一數(shù)據(jù)庫中根據(jù)所需廣播的系統(tǒng)信息設(shè)置一監(jiān)聽對(duì)象。其 中,該數(shù)據(jù)庫可以是系統(tǒng)的Settings數(shù)據(jù)庫,該系統(tǒng)信息可包括網(wǎng)絡(luò)狀態(tài)變化信息、電池 變化信息或者系統(tǒng)設(shè)置變化信息等方便用戶(如應(yīng)用開發(fā)者)了解系統(tǒng)底層狀態(tài)的信息。 具體地,可通過增加與系統(tǒng)信息相關(guān)的字段作為該監(jiān)聽對(duì)象。
[0034] 以所需廣播的系統(tǒng)信息為電池變化信息為例進(jìn)行說明,在本步驟中,可在 Settings數(shù)據(jù)庫中增加字段GET_BATTERY_INFO,該字段及相關(guān)代碼的存放路徑為 frameworks/base/core/java/android/provider/Settings.java,相關(guān)代碼如下:
[0035] publicstaticfinalStringGET_BATTERY_INFO= "get_battery_info"
[0036] 步驟S12,監(jiān)聽所述監(jiān)聽對(duì)象;
[0037] 在本步驟中,可在處理系統(tǒng)信息的服務(wù)組件中監(jiān)聽所述監(jiān)聽對(duì)象。該服 務(wù)組件包括例如ConnectivityService或者BatteryService等。其中,服務(wù)組件 ConnectivityService主要用于處理網(wǎng)絡(luò)狀態(tài)變化信息,比如監(jiān)聽、廣播網(wǎng)絡(luò)狀態(tài)變化信 息;服務(wù)組件BatteryService主要用于處理電池變化信息,比如監(jiān)聽、廣播電池變化信息。
[0038] 請(qǐng)一并參考圖2,該步驟S12包括以下子步驟:
[0039] 子步