本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種安卓應(yīng)用的廣播代理方法和裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,安卓系統(tǒng)中的應(yīng)用程序被安裝時,應(yīng)用程序安裝包中的配置文件會向系統(tǒng)進行注冊,以聲明應(yīng)用程序在運行過程中所需要用到的各種相關(guān)組件、資源的信息,以及,應(yīng)用程序在運行過程中也可以向系統(tǒng)動態(tài)地進行進行注冊,相應(yīng)地,系統(tǒng)會記住應(yīng)用程序被安裝時或運行過程中的注冊信息。以應(yīng)用程序所用到的廣播接收器組件為例,當(dāng)有符合條件的廣播消息到達時,該應(yīng)用程序的廣播接收器會正常接收并作出相應(yīng)處理。
然而,當(dāng)用戶想在同一個安卓系統(tǒng)中,并行運行兩個相同的應(yīng)用程序時,由于兩個相同的應(yīng)用程序中的注冊信息重復(fù),系統(tǒng)無法接納兩個相同的應(yīng)用程序的相同的注冊信息,仍然以應(yīng)用程序所用到的廣播接收器組件為例,該應(yīng)用程序?qū)ο到y(tǒng)發(fā)送的或者系統(tǒng)轉(zhuǎn)發(fā)的廣播消息的應(yīng)答就會出現(xiàn)異常,甚至無法接受到廣播消息。這給用戶帶來諸多不便。
技術(shù)實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的安卓應(yīng)用的廣播代理方法和裝置。
依據(jù)本發(fā)明的一個方面,提供了一種安卓應(yīng)用的廣播代理方法,該方法包括:
構(gòu)造虛擬機環(huán)境,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行;
代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
可選地,所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息包括:
監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件;
當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件時,判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;
是則,攔截并接收所述廣播消息。
可選地,所述監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件包括:
將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時,確定監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件;
該方法進一步包括:當(dāng)確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器時,放行所述廣播消息。
可選地,在所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息之前,該方法進一步包括:獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中;
則所述判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器;
是則,確定所述廣播消息的目標廣播接收器是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;否則,確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
可選地,所述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中包括:
獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;
解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊的廣播接收器的相關(guān)信息并保存至所述配置管理表中的靜態(tài)注冊表。
可選地,所述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中還包括:
監(jiān)聽虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;
當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表。
可選地,所述監(jiān)聽虛擬機中的各指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件包括:
將鉤子函數(shù)掛載在虛擬機中注冊廣播接收器的接口上,當(dāng)攔截到所述注冊廣播接收器的接口發(fā)送的注冊請求時,確定監(jiān)聽到虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;
所述當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表包括:當(dāng)監(jiān)聽到所述注冊請求時,強制結(jié)束所述注冊請求的繼續(xù)傳播;從所述注冊請求中提取對應(yīng)的廣播接收器的相關(guān)信息并保存至所述動態(tài)注冊表。
可選地,所述靜態(tài)注冊表和所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息包括:該廣播接收器的屬性數(shù)據(jù);
所述判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器包括:
從所述廣播消息對應(yīng)的Intent參數(shù)中提取指示目標廣播接收器的屬性數(shù)據(jù),判斷所提取的屬性數(shù)據(jù)是否匹配于所述靜態(tài)注冊表和所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù);
如果所提取的屬性數(shù)據(jù)匹配于所述靜態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表;
如果所提取的屬性數(shù)據(jù)匹配于所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表。
可選地,該方法進一步包括:在安卓系統(tǒng)中預(yù)先聲明用于運行廣播接收器的預(yù)留進程;
當(dāng)所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表時,所述按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
啟動所述用于運行廣播接收器的預(yù)留進程;在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化;將所述廣播消息發(fā)送至該實例化后的廣播接收器。
可選地,所述在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化包括:根據(jù)所述廣播消息對應(yīng)的Intent參數(shù)中指示目標廣播接收器的屬性數(shù)據(jù)在所述預(yù)留進程中對所述廣播接收器進行實例化;
所述將所述廣播消息發(fā)送至該實例化后的廣播接收器包括:將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至該實例化后的廣播接收器,并回調(diào)該廣播接收器中的onReceive方法。
可選地,所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息還包括:該廣播接收器所屬的進程信息;
當(dāng)所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表時,所述按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中,使得該進程中的廣播接收器接收所述廣播消息。
可選地,所述動態(tài)注冊表中的每個廣播接收器所屬的進程信息包括:該廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息;
所述根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中包括:根據(jù)所述動態(tài)注冊表中命中的廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息,通過調(diào)用相應(yīng)的Binder機制將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至相應(yīng)的進程中。
可選地,所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
通過虛擬機中的常駐服務(wù)代理指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
依據(jù)本發(fā)明的另一個方面,提供了一種安卓應(yīng)用的廣播代理裝置,該裝置包括:
環(huán)境構(gòu)造單元,適于構(gòu)造虛擬機環(huán)境,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行;
常駐服務(wù)單元,適于代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
可選地,所述常駐服務(wù)單元,適于監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件時,判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;是則,攔截并接收所述廣播消息。
可選地,所述常駐服務(wù)單元,適于將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時,確定監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件;還適于當(dāng)確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器時,放行所述廣播消息。
可選地,所述常駐服務(wù)單元,進一步適于在所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息之前,獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中;適于判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器;是則,確定所述廣播消息的目標廣播接收器是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;否則,確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
可選地,所述常駐服務(wù)單元,適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊的廣播接收器的相關(guān)信息并保存至所述配置管理表中的靜態(tài)注冊表。
可選地,所述常駐服務(wù)單元,還適于監(jiān)聽虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表。
可選地,所述常駐服務(wù)單元,適于將鉤子函數(shù)掛載在虛擬機中注冊廣播接收器的接口上,當(dāng)攔截到所述注冊廣播接收器的接口發(fā)送的注冊請求時,確定監(jiān)聽到虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;當(dāng)監(jiān)聽到所述注冊請求時,強制結(jié)束所述注冊請求的繼續(xù)傳播;從所述注冊請求中提取對應(yīng)的廣播接收器的相關(guān)信息并保存至所述動態(tài)注冊表。
可選地,所述靜態(tài)注冊表和所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息包括:該廣播接收器的屬性數(shù)據(jù);
所述常駐服務(wù)單元,適于從所述廣播信息對應(yīng)的Intent參數(shù)中提取指示目標廣播接收器的屬性數(shù)據(jù),判斷所提取的屬性數(shù)據(jù)是否匹配于所述靜態(tài)注冊表和所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù);如果所提取的屬性數(shù)據(jù)匹配于所述靜態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表;如果所提取的屬性數(shù)據(jù)匹配于所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表。
可選地,該裝置進一步包括:信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明用于運行廣播接收器的預(yù)留進程;
所述常駐服務(wù)單元,適于當(dāng)所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表時,啟動所述用于運行廣播接收器的預(yù)留進程;在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化;將所述廣播消息發(fā)送至該實例化后的廣播接收器。
可選地,所述常駐服務(wù)單元,適于根據(jù)所述廣播消息對應(yīng)的Intent參數(shù)中指示目標廣播接收器的屬性數(shù)據(jù)在所述預(yù)留進程中對所述廣播接收器進行實例化;將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至該實例化后的廣播接收器,并回調(diào)該廣播接收器中的onReceice方法。
可選地,所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息還包括:該廣播接收器所屬的進程信息;
所述常駐服務(wù)單元,適于當(dāng)所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表時,根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中,使得該進程中的廣播接收器接收所述廣播消息。
可選地,所述動態(tài)注冊表中的每個廣播接收器所屬的進程信息包括:該廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息;
所述常駐服務(wù)單元,適于當(dāng)根據(jù)所述動態(tài)注冊表中命中的廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息,通過調(diào)用相應(yīng)的Binder機制將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至相應(yīng)的進程中。
由上述可知,本發(fā)明的技術(shù)方案所構(gòu)造的虛擬機環(huán)境在系統(tǒng)中額外的提供了一個平臺,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中運行,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行,實現(xiàn)了指定安卓應(yīng)用自身與指定安卓應(yīng)用分身的并行運行,對于在虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用,由于這些虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用對于安卓系統(tǒng)來說是未知的,為了使得指定安卓應(yīng)用的分身應(yīng)用能夠正常地接收廣播消息并執(zhí)行相應(yīng)操作,本方案代理指定安卓應(yīng)用的分身應(yīng)用接收廣播消息后,按一定的方式進行分析處理,并選擇性的將符合條件的廣播消息傳送給指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。保證了指定安卓應(yīng)用的分身應(yīng)用與其對應(yīng)的指定安卓應(yīng)用一樣能夠正常的運行以及和系統(tǒng)正常的交互。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的廣播的代理處理方法的流程圖;
圖2示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的廣播的代理處理裝置的示意圖;
圖3示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的廣播代理裝置的示意圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的廣播的代理處理方法的流程圖,該方法包括:
步驟S110,構(gòu)造虛擬機環(huán)境,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行。
其中,指定安卓應(yīng)用指的是能夠在安卓系統(tǒng)中正常運行的,類似于QQ聊天、UC瀏覽器等的應(yīng)用軟件。而指定安卓應(yīng)用的分身應(yīng)用作為指定安卓應(yīng)用的復(fù)制體,可以看做是指定安卓應(yīng)用的分身?,F(xiàn)有技術(shù)中,每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用是不可以并行運行的,其原因是安卓系統(tǒng)無法認可兩個相同的應(yīng)用所聲明的相同的注冊信息,因此,在指定安卓應(yīng)用已安裝的情況下,指定安卓應(yīng)用的分身應(yīng)用是無法成功注冊到安卓系統(tǒng)中的,對于安卓系統(tǒng)來說,指定安卓應(yīng)用的分身應(yīng)用是未知的,安卓系統(tǒng)無法與其進行正常交互。
步驟S120,代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
其中,廣播消息是指由安卓系統(tǒng)發(fā)送或者由安卓系統(tǒng)中的應(yīng)用發(fā)送且由安卓系統(tǒng)轉(zhuǎn)發(fā)的廣播類的消息,包括系統(tǒng)的運行指令,或參數(shù)設(shè)定、更改等的消息。例如,對某一特定應(yīng)用軟件的開機啟動,即為一條廣播消息。
可見,圖1所示的方法所構(gòu)造的虛擬機環(huán)境在系統(tǒng)中額外的提供了一個平臺,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中運行,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行,實現(xiàn)了指定安卓應(yīng)用自身與指定安卓應(yīng)用分身的并行運行,對于在虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用,由于這些虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用對于安卓系統(tǒng)來說是未知的,為了使得指定安卓應(yīng)用的分身應(yīng)用能夠正常地接收廣播消息并執(zhí)行相應(yīng)操作,本方案代理指定安卓應(yīng)用的分身應(yīng)用接收廣播消息后,按一定的方式進行分析處理,并選擇性的將符合條件的廣播消息傳送給指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。保證了指定安卓應(yīng)用的分身應(yīng)用與其對應(yīng)的指定安卓應(yīng)用一樣能夠正常的運行以及和系統(tǒng)正常的交互。
例如,依據(jù)本方案,用戶可以在安卓手機上以不同賬號登錄兩個QQ應(yīng)用,使得這兩個QQ應(yīng)用并行地運行,用戶可以根據(jù)需求分別使用這兩個QQ應(yīng)用與不同的好友進行對話。
在本發(fā)明的一個實施例中,圖1所示方法的步驟S120中所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接受廣播消息包括:監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件時,判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;是則,攔截并接收所述廣播消息。
具體地,上述監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件包括:將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時,確定監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件;則當(dāng)確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器時,該方法進一步包括:放行所述廣播消息。
其中,系統(tǒng)的廣播消息都是由接口發(fā)出的。在不曾發(fā)送廣播消息的接口上,鉤子函數(shù)抓取不到任何指令,即表示,系統(tǒng)在該接口處無廣播消息;若鉤子函數(shù)在接口處攔截到發(fā)送廣播消息的指令,則表示系統(tǒng)在該接口處有發(fā)送廣播消息的事件發(fā)生。
系統(tǒng)總是在不停的向應(yīng)用程序發(fā)送各種各樣的廣播消息。因為系統(tǒng)中的應(yīng)用有很多,對某一特定的應(yīng)用,系統(tǒng)發(fā)送的很多廣播消息實際上是與它無關(guān)的。比如,用戶在安卓系統(tǒng)中正同時在運行一個QQ聊天應(yīng)用和一個UC瀏覽器應(yīng)用。此時系統(tǒng)發(fā)送了一條“關(guān)閉UC瀏覽器軟件”的廣播消息,那這條消息對QQ聊天應(yīng)用軟件是沒有作用的。也就是該廣播消息的目標接收器為UC瀏覽器應(yīng)用軟件的廣播接收器,而非QQ聊天應(yīng)用軟件的應(yīng)用接收器。
所以,在鉤子函數(shù)確定攔截到的廣播消息的廣播接收器,并非是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器時,則放行該廣播消息。即該廣播消息對分身應(yīng)用接下來的行為不會產(chǎn)生任何影響。
在本發(fā)明的一個實施例中,在所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息之前,圖1所示的方法進一步包括:獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息,并保存至配置管理表中。
則上述判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器;是則,確定所述廣播消息的目標廣播接收器時虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;否則,確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
其中,每一個應(yīng)用軟件在被安裝到安卓系統(tǒng)中時,該應(yīng)用的安裝包被安裝在安卓系統(tǒng)中,安裝包中包含配置文件,配置文件中的配置信息被相應(yīng)地注冊到安卓系統(tǒng)中,以向安卓系統(tǒng)聲明應(yīng)用在運行過程中所需要用到的組件和資源等信息。一般情況下,不同應(yīng)用所注冊的信息是不同的。
通常來說,不同的安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)注冊信息是不同的。同一個安卓應(yīng)用的分身應(yīng)用在不同時刻的廣播接收器的相關(guān)注冊信息也有可能是不同的。所以,在代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用每一次接收廣播之前,都要先獲取該時刻之前的該安卓應(yīng)用的分身應(yīng)用在不同時刻的廣播接收器的相關(guān)注冊信息,并保存至配置管理表中。
在本發(fā)明的一個實施例中,上述獲取到的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息是指廣播接收器的靜態(tài)注冊信息,即上述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中包括:獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊的廣播接收器的相關(guān)信息并保存至所述配置管理表中的靜態(tài)注冊表。
例如,用戶在安卓系統(tǒng)中正常安裝一個QQ聊天應(yīng)用,包含該應(yīng)用注冊信息的安裝包被復(fù)制到虛擬機環(huán)境中,故所有與廣播接收器有關(guān)的注冊信息均靜態(tài)的存在于該安裝包中。
在本發(fā)明的另一個實施例中,上述獲取到的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息是指廣播接收器的動態(tài)注冊信息,即上述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中還包括:監(jiān)聽虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表。
具體地,上述監(jiān)聽虛擬機中的各指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件包括:將鉤子函數(shù)掛載在虛擬機中注冊廣播接收器的接口上,當(dāng)攔截到所述注冊廣播接收器的接口發(fā)送的注冊請求時,確定監(jiān)聽到虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;所述當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;上述該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表包括:當(dāng)監(jiān)聽到所述注冊請求時,強制結(jié)束所述注冊請求的繼續(xù)傳播;從所述注冊請求中提取對應(yīng)的廣播接收器的相關(guān)信息并保存至所述動態(tài)注冊表中。
例如,用戶在安卓系統(tǒng)中運行一個QQ聊天應(yīng)用,同時在虛擬機中運行該QQ聊天應(yīng)用的分身應(yīng)用。此時,該分身應(yīng)用向安卓系統(tǒng)發(fā)送事件A,該事件A的內(nèi)容為:向安卓系統(tǒng)注冊廣播接收器。該事件A以注冊請求的方式發(fā)送,并且該注冊請求中包含了與廣播接收器相關(guān)的信息。
在上述建立動態(tài)注冊表和靜態(tài)注冊表的基礎(chǔ)上,所述靜態(tài)注冊表和所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息包括:該廣播接收器的屬性數(shù)據(jù)。
則所述判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器包括:從所述廣播消息對應(yīng)的Intent參數(shù)中提取指示目標廣播接收器的屬性數(shù)據(jù),判斷所提取的屬性數(shù)據(jù)是否匹配于所述靜態(tài)注冊表和所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù);如果所提取的屬性數(shù)據(jù)匹配于所述靜態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表;如果所提取的屬性數(shù)據(jù)匹配于所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表。其中,Intent參數(shù)用來描述廣播消息的特征,這些參數(shù)中也包含目標廣播接收器的某些參數(shù)。
因為一個應(yīng)用安裝到系統(tǒng)之后,該系統(tǒng)就會記住該應(yīng)用配置文件中聲明的固有的廣播參數(shù)。
當(dāng)確定所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表時,在本發(fā)明的一個實施例中,圖1所示的方法進一步包括:在安卓系統(tǒng)中預(yù)先聲明用于運行廣播接收器的預(yù)留進程。
則當(dāng)所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表時,所述按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:啟動所述用于運行廣播接收器的預(yù)留進程;在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化;將所述廣播消息發(fā)送至該實例化后的廣播接收器。
例如name1代表一個廣播接收器,name2代表另一個廣播接收器。若一條廣播消息Intent參數(shù)用來指示目標廣播接收器的屬性數(shù)據(jù)為name1,則表示該廣播消息應(yīng)該被name1廣播接收器接受并執(zhí)行。
具體地,所述在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化包括:根據(jù)所述廣播消息對應(yīng)的Intent參數(shù)中指示目標廣播接收器的屬性數(shù)據(jù)在所述預(yù)留進程中對所述廣播接收器進行實例化;
所述將所述廣播消息發(fā)送至該實例化后的廣播接收器包括:將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至該實例化后的廣播接收器,并回調(diào)該廣播接收器的onReceive方法。
例如,現(xiàn)有四個廣播消息:1、2、3、4,每個廣播消息各自帶Intent參數(shù)。若四個廣播消息均為靜態(tài),則虛擬機會為每一個廣播消息分配一個相對應(yīng)的接收預(yù)留進程1、2、3、4。當(dāng)然也有可能不同的廣播消息對應(yīng)同一個接收預(yù)留進程,表示可以這些不同的廣播消息可以被同一個廣播接收器接收,即在同一個進程中運行。若啟動預(yù)留進程1,則記錄在預(yù)留進程1中的廣播消息1的Intent參數(shù)被提取出來,把其目標廣播接收器實例化,調(diào)用該目標廣播接收器的onReceiver方法。則該廣播消息成功完成。依次類推,其他的廣播消息用同樣的方式處理。
當(dāng)確定所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表時,在本發(fā)明的一個實施例中,所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息還包括:該廣播接收器所屬的進程信息;當(dāng)所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表時,所述按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中,使得該進程中的廣播接收器接受所述廣播消息。
其中,所述動態(tài)注冊表中的每個廣播接收器所屬的進程信息包括:該廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息;所述根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所述的進程中包括:根據(jù)所述動態(tài)注冊表中命中的廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息,通過調(diào)用相應(yīng)的Binder機制將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至相應(yīng)的進程中。
即,動態(tài)注冊的廣播消息,因為是動態(tài)的,它對應(yīng)一個進程中的Binder。該Binder中就包含了該廣播消息的屬性數(shù)據(jù),即Intent參數(shù)。動態(tài)注冊的廣播消息于廣播接收器可能是一對一的匹配,也可能是多對一的匹配。
在本發(fā)明的一個實施例中,所述代理虛擬機中的指定安卓應(yīng)該的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:通過虛擬機中的常駐服務(wù)代理指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,安卓預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的復(fù)件應(yīng)該的廣播接收器。其中,該常駐服務(wù)存在于該構(gòu)建的虛擬機中。
圖2示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的廣播代理裝置的示意圖。如圖2所示,該安卓應(yīng)用的廣播代理裝置200包括:
環(huán)境構(gòu)造單元210,適于構(gòu)造虛擬機環(huán)境,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行;
常駐服務(wù)單元220,適于代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
可見,圖2所示的裝置所構(gòu)造的虛擬機環(huán)境在系統(tǒng)中額外的提供了一個平臺,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中運行,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行,實現(xiàn)了指定安卓應(yīng)用自身與指定安卓應(yīng)用分身的并行運行,對于在虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用,由于這些虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用對于安卓系統(tǒng)來說是未知的,為了使得指定安卓應(yīng)用的分身應(yīng)用能夠正常地接收廣播消息并執(zhí)行相應(yīng)操作,本方案代理指定安卓應(yīng)用的分身應(yīng)用接收廣播消息后,按一定的方式進行分析處理,并選擇性的將符合條件的廣播消息傳送給指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。保證了指定安卓應(yīng)用的分身應(yīng)用與其對應(yīng)的指定安卓應(yīng)用一樣能夠正常的運行以及和系統(tǒng)正常的交互。
在本發(fā)明的一個實施例中,常駐服務(wù)單元220,適于監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件時,判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;是則,攔截并接收所述廣播消息。
具體地,常駐服務(wù)單元220,適于將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時,確定監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件;還適于當(dāng)確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器時,放行所述廣播消息。
在本發(fā)明的一個實施例中,常駐服務(wù)單元220,進一步適于在所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息之前,獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中;適于判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器;是則,確定所述廣播消息的目標廣播接收器是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;否則,確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
在本發(fā)明的一個實施例中,常駐服務(wù)單元220,適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊的廣播接收器的相關(guān)信息并保存至所述配置管理表中的靜態(tài)注冊表。
進一步地,在本發(fā)明的一個實施例中,常駐服務(wù)單元220,還適于監(jiān)聽虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表。
其中,常駐服務(wù)單元220,適于將鉤子函數(shù)掛載在虛擬機中注冊廣播接收器的接口上,當(dāng)攔截到所述注冊廣播接收器的接口發(fā)送的注冊請求時,確定監(jiān)聽到虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;當(dāng)監(jiān)聽到所述注冊請求時,強制結(jié)束所述注冊請求的繼續(xù)傳播;從所述注冊請求中提取對應(yīng)的廣播接收器的相關(guān)信息并保存至所述動態(tài)注冊表。
具體地,所述靜態(tài)注冊表和所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息包括:該廣播接收器的屬性數(shù)據(jù);
所述常駐服務(wù)單元220,適于從所述廣播信息對應(yīng)的Intent參數(shù)中提取指示目標廣播接收器的屬性數(shù)據(jù),判斷所提取的屬性數(shù)據(jù)是否匹配于所述靜態(tài)注冊表和所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù);如果所提取的屬性數(shù)據(jù)匹配于所述靜態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表;如果所提取的屬性數(shù)據(jù)匹配于所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表。
在本發(fā)明的一個實施例中,所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息還包括:該廣播接收器所屬的進程信息;所述常駐服務(wù)單元220,適于當(dāng)所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表時,根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中,使得該進程中的廣播接收器接收所述廣播消息。
在本發(fā)明的一個實施例中,所述動態(tài)注冊表中的每個廣播接收器所屬的進程信息包括:該廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息;所述常駐服務(wù)單元220,適于當(dāng)根據(jù)所述動態(tài)注冊表中命中的廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息,通過調(diào)用相應(yīng)的Binder機制將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至相應(yīng)的進程中。
圖3示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的廣播代理裝置的示意圖。如圖3所示,該安卓應(yīng)用的廣播代理裝置300包括:環(huán)境構(gòu)造單元310、常駐服務(wù)單元320和信息配置單元330。
其中,環(huán)境構(gòu)造單元310、常駐服務(wù)單元320具有與上述環(huán)境構(gòu)造單元210、常駐服務(wù)單元220對應(yīng)相同的功能,相同的部分在此不再贅述。
信息配置單元330,適于在安卓系統(tǒng)中預(yù)先聲明用于運行廣播接收器的預(yù)留進程。
在本發(fā)明的一個實施例中,所述常駐服務(wù)單元320,還適于當(dāng)所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表時,啟動所述用于運行廣播接收器的預(yù)留進程;在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化;將所述廣播消息發(fā)送至該實例化后的廣播接收器。
具體地,常駐服務(wù)單元320,適于根據(jù)所述廣播消息對應(yīng)的Intent參數(shù)中指示目標廣播接收器的屬性數(shù)據(jù)在所述預(yù)留進程中對所述廣播接收器進行實例化;將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至該實例化后的廣播接收器,并回調(diào)該廣播接收器中的onReceice方法。
需要說明的是,圖2-圖3所示裝置的各實施例與圖1所示方法的各實施例對應(yīng)相同,上文已有詳細說明,在此不再贅述。
綜上所述,在本發(fā)明的技術(shù)方案中,所構(gòu)造的虛擬機環(huán)境在系統(tǒng)中額外的提供了一個平臺,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中運行,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行,實現(xiàn)了指定安卓應(yīng)用自身與指定安卓應(yīng)用分身的并行運行,對于在虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用,由于這些虛擬機中運行的指定安卓應(yīng)用的分身應(yīng)用對于安卓系統(tǒng)來說是未知的,為了使得指定安卓應(yīng)用的分身應(yīng)用能夠正常地接收廣播消息并執(zhí)行相應(yīng)操作,本方案代理指定安卓應(yīng)用的分身應(yīng)用接收廣播消息后,按一定的方式進行分析處理,并選擇性的將符合條件的廣播消息傳送給指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。保證了指定安卓應(yīng)用的分身應(yīng)用與其對應(yīng)的指定安卓應(yīng)用一樣能夠正常的運行以及和系統(tǒng)正常的交互。
需要說明的是:
在此提供的算法和顯示不與任何特定計算機、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的安卓應(yīng)用的廣播代理裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
本發(fā)明公開了A1、一種安卓應(yīng)用的廣播代理方法,其中,包括:
構(gòu)造虛擬機環(huán)境,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行;
代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
A2、如A1所述的方法,其中,所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息包括:
監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件;
當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件時,判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;
是則,攔截并接收所述廣播消息。
A3、如A2所述的方法,其中,所述監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件包括:
將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時,確定監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件;
該方法進一步包括:當(dāng)確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器時,放行所述廣播消息。
A4、如A2所述的方法,其中,在所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息之前,該方法進一步包括:獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中;
則所述判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器;
是則,確定所述廣播消息的目標廣播接收器是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;否則,確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
A5、如A4所述的方法,其中,所述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中包括:
獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;
解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊的廣播接收器的相關(guān)信息并保存至所述配置管理表中的靜態(tài)注冊表。
A6、如A5所述的方法,其中,所述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中還包括:
監(jiān)聽虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;
當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表。
A7、如A6所述的方法,其中,所述監(jiān)聽虛擬機中的各指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件包括:
將鉤子函數(shù)掛載在虛擬機中注冊廣播接收器的接口上,當(dāng)攔截到所述注冊廣播接收器的接口發(fā)送的注冊請求時,確定監(jiān)聽到虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;
所述當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表包括:當(dāng)監(jiān)聽到所述注冊請求時,強制結(jié)束所述注冊請求的繼續(xù)傳播;從所述注冊請求中提取對應(yīng)的廣播接收器的相關(guān)信息并保存至所述動態(tài)注冊表。
A8、如A6所述的方法,其中,所述靜態(tài)注冊表和所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息包括:該廣播接收器的屬性數(shù)據(jù);
所述判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器包括:
從所述廣播消息對應(yīng)的Intent參數(shù)中提取指示目標廣播接收器的屬性數(shù)據(jù),判斷所提取的屬性數(shù)據(jù)是否匹配于所述靜態(tài)注冊表和所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù);
如果所提取的屬性數(shù)據(jù)匹配于所述靜態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表;
如果所提取的屬性數(shù)據(jù)匹配于所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表。
A9、如A8所述的方法,其中,該方法進一步包括:在安卓系統(tǒng)中預(yù)先聲明用于運行廣播接收器的預(yù)留進程;
當(dāng)所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表時,所述按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
啟動所述用于運行廣播接收器的預(yù)留進程;在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化;將所述廣播消息發(fā)送至該實例化后的廣播接收器。
A10、如A9所述的方法,其中,所述在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化包括:根據(jù)所述廣播消息對應(yīng)的Intent參數(shù)中指示目標廣播接收器的屬性數(shù)據(jù)在所述預(yù)留進程中對所述廣播接收器進行實例化;
所述將所述廣播消息發(fā)送至該實例化后的廣播接收器包括:將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至該實例化后的廣播接收器,并回調(diào)該廣播接收器中的onReceive方法。
A11、如A8所述的方法,其中,所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息還包括:該廣播接收器所屬的進程信息;
當(dāng)所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表時,所述按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中,使得該進程中的廣播接收器接收所述廣播消息。
A12、如A11所述的方法,其中,所述動態(tài)注冊表中的每個廣播接收器所屬的進程信息包括:該廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息;
所述根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中包括:根據(jù)所述動態(tài)注冊表中命中的廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息,通過調(diào)用相應(yīng)的Binder機制將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至相應(yīng)的進程中。
A13、如A1所述的方法,其中,所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器包括:
通過虛擬機中的常駐服務(wù)代理指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
本發(fā)明還公開了B14、一種安卓應(yīng)用的廣播代理裝置,其中,包括:
環(huán)境構(gòu)造單元,適于構(gòu)造虛擬機環(huán)境,將安卓系統(tǒng)中的一個或多個指定安卓應(yīng)用的分身應(yīng)用放入虛擬機中,使得每個指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運行;
常駐服務(wù)單元,適于代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息,按照預(yù)設(shè)策略將所述廣播消息轉(zhuǎn)發(fā)至相應(yīng)指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
B15、如B14所述的裝置,其中,
所述常駐服務(wù)單元,適于監(jiān)聽安卓系統(tǒng)中發(fā)送廣播消息的事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件時,判斷所述廣播消息的目標廣播接收器是否為虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;是則,攔截并接收所述廣播消息。
B16、如B15所述的裝置,其中,
所述常駐服務(wù)單元,適于將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時,確定監(jiān)聽到安卓系統(tǒng)中發(fā)送廣播消息的事件;還適于當(dāng)確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器時,放行所述廣播消息。
B17、如B15所述的裝置,其中,
所述常駐服務(wù)單元,進一步適于在所述代理虛擬機中的指定安卓應(yīng)用的分身應(yīng)用接收廣播消息之前,獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊的廣播接收器的相關(guān)信息并保存至配置管理表中;適于判斷所述廣播消息的目標廣播接收器是否命中所述配置管理表中記錄的廣播接收器;是則,確定所述廣播消息的目標廣播接收器是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器;否則,確定所述廣播消息的目標廣播接收器不是虛擬機中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器。
B18、如B17所述的裝置,其中,
所述常駐服務(wù)單元,適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊的廣播接收器的相關(guān)信息并保存至所述配置管理表中的靜態(tài)注冊表。
B19、如B18所述的裝置,其中,
所述常駐服務(wù)單元,還適于監(jiān)聽虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;當(dāng)監(jiān)聽到該事件時,禁止該事件繼續(xù)執(zhí)行;獲取該事件對應(yīng)的廣播接收器的相關(guān)信息并保存至所述配置管理表中的動態(tài)注冊表。
B20、如B19所述的裝置,其中,
所述常駐服務(wù)單元,適于將鉤子函數(shù)掛載在虛擬機中注冊廣播接收器的接口上,當(dāng)攔截到所述注冊廣播接收器的接口發(fā)送的注冊請求時,確定監(jiān)聽到虛擬機中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)注冊廣播接收器的事件;當(dāng)監(jiān)聽到所述注冊請求時,強制結(jié)束所述注冊請求的繼續(xù)傳播;從所述注冊請求中提取對應(yīng)的廣播接收器的相關(guān)信息并保存至所述動態(tài)注冊表。
B21、如B19所述的裝置,其中,所述靜態(tài)注冊表和所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息包括:該廣播接收器的屬性數(shù)據(jù);
所述常駐服務(wù)單元,適于從所述廣播信息對應(yīng)的Intent參數(shù)中提取指示目標廣播接收器的屬性數(shù)據(jù),判斷所提取的屬性數(shù)據(jù)是否匹配于所述靜態(tài)注冊表和所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù);如果所提取的屬性數(shù)據(jù)匹配于所述靜態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表;如果所提取的屬性數(shù)據(jù)匹配于所述動態(tài)注冊表中的廣播接收器的屬性數(shù)據(jù),確定所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表。
B22、如B21所述的裝置,其中,該裝置進一步包括:信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明用于運行廣播接收器的預(yù)留進程;
所述常駐服務(wù)單元,適于當(dāng)所述廣播消息的目標廣播接收器命中所述靜態(tài)注冊表時,啟動所述用于運行廣播接收器的預(yù)留進程;在所述預(yù)留進程中對所述靜態(tài)注冊表中命中的廣播接收器進行實例化;將所述廣播消息發(fā)送至該實例化后的廣播接收器。
B23、如B22所述的裝置,其中,所述常駐服務(wù)單元,適于根據(jù)所述廣播消息對應(yīng)的Intent參數(shù)中指示目標廣播接收器的屬性數(shù)據(jù)在所述預(yù)留進程中對所述廣播接收器進行實例化;將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至該實例化后的廣播接收器,并回調(diào)該廣播接收器中的onReceice方法。
B24、如B21所述的裝置,其中,所述動態(tài)注冊表中的每個廣播接收器的相關(guān)信息還包括:該廣播接收器所屬的進程信息;
所述常駐服務(wù)單元,適于當(dāng)所述廣播消息的目標廣播接收器命中所述動態(tài)注冊表時,根據(jù)所述動態(tài)注冊表中命中的廣播接收器所屬的進程信息,將所述廣播消息發(fā)送至所述動態(tài)注冊表中命中的廣播接收器所屬的進程中,使得該進程中的廣播接收器接收所述廣播消息。
B25、如B24所述的裝置,其中,所述動態(tài)注冊表中的每個廣播接收器所屬的進程信息包括:該廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息;
所述常駐服務(wù)單元,適于當(dāng)根據(jù)所述動態(tài)注冊表中命中的廣播接收器對應(yīng)的注冊廣播接收器的事件所用的Binder機制信息,通過調(diào)用相應(yīng)的Binder機制將所述廣播消息對應(yīng)的Intent參數(shù)發(fā)送至相應(yīng)的進程中。