本申請涉及定位技術(shù)領(lǐng)域,尤其涉及模擬器模擬定位方法及裝置。
背景技術(shù):
Android移動終端的定位主要有三種方式:GPS(Global Positioning System,全球定位系統(tǒng))定位、基站定位、WIFI定位。其中GPS定位需要GPS硬件支持,直接和衛(wèi)星交互來獲取當(dāng)前經(jīng)緯度,這種方式需要手機支持GPS模塊。基站定位的方式有多種,一種是收集附近的三個基站進行三角定位,由于每個基站的位置固定,利用電磁波在這三個基站中轉(zhuǎn)所需時間計算出手機所在位置,另一種是,利用獲取最近的基站的信息,其中包括基站id、location area code、mobile country code、mobile network code和信號強度,根據(jù)信息推測出當(dāng)前所在的位置信息。WI-FI定位通過收集手機周圍WIFI SSID與服務(wù)器中記錄的SSID進行匹配,將匹配的SSID對應(yīng)的位置確定為定位位置信息。
Android平臺無論何種定位方式都是在這三種基本定位上面衍生的。定位SDK會根據(jù)當(dāng)前的實際情況,如是否開啟GPS,是否連接網(wǎng)絡(luò),是否掃描到Wi-Fi信息等,生成定位依據(jù),并根據(jù)開發(fā)者設(shè)置的實際定位策略(如高精度模式,低功耗模式,僅用設(shè)備模式)進行定位。
隨著Android模擬器運用的越來越廣泛,模擬器中很多APP需要訪問用戶的位置信息,滿足APP對定位功能的需求。然而,Android模擬器運行在PC端,沒有對應(yīng)的定位硬件模塊,例如,沒有GPS,沒有SIM卡,如果Android客戶端APP需要訪問當(dāng)前的位置信息,Android模擬器無法實現(xiàn)定位,從而無法滿足APP對定位功能的需求。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁┠M器模擬定位方法和裝置,以解決現(xiàn)有技術(shù)Android模擬器無法實現(xiàn)定位的問題。
根據(jù)本申請實施例的第一方面,提供一種模擬器模擬定位方法,所述方法包括:
從外部獲取定位位置信息;
將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式,傳輸至對應(yīng)的虛擬定位模塊;所述虛擬定位模塊用于模擬相應(yīng)的定位硬件的功能;
響應(yīng)于接收到的應(yīng)用的定位數(shù)據(jù)調(diào)用指令,向所述應(yīng)用返回定位數(shù)據(jù)。
在一個實施例中,所述定位硬件的功能為GPS定位,所述虛擬定位模塊位于HAL層,所述定位數(shù)據(jù)格式包括GPS定位數(shù)據(jù)格式。
在一個實施例中,所述定位硬件的功能為基站定位,所述虛擬定位模塊位于RIL層,所述定位數(shù)據(jù)格式包括基站定位數(shù)據(jù)格式。
在一個實施例中,所述定位硬件的功能為WIFI定位,所述定位數(shù)據(jù)格式包括WIFI定位數(shù)據(jù)格式。
在一個實施例中,所述將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式包括步驟:
從基站數(shù)據(jù)庫中匹配出與所述定位位置信息對應(yīng)的基站標識。
在一個實施例中,所述將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式包括步驟:
獲取與所述位置坐標信息對應(yīng)的WIFI的SSID。
根據(jù)本申請實施例的第二方面,提供一種模擬器模擬定位裝置,所述裝置包括:
信息獲取模塊,用于從外部獲取定位位置信息;
信息傳輸模塊,用于將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式,傳輸至對應(yīng)的虛擬定位模塊;所述虛擬定位模塊用于模擬相應(yīng)的定位硬件的功能;
信息響應(yīng)模塊,用于響應(yīng)于接收到的應(yīng)用的定位數(shù)據(jù)調(diào)用指令,向所述應(yīng)用返回定位數(shù)據(jù)。
在一個實施例中,所述定位硬件的功能為GPS定位,所述虛擬定位模塊位于HAL層,所述定位數(shù)據(jù)格式包括GPS定位數(shù)據(jù)格式。
在一個實施例中,所述定位硬件的功能為基站定位,所述虛擬定位模塊位于RIL層,所述定位數(shù)據(jù)格式包括基站定位數(shù)據(jù)格式。
在一個實施例中,所述定位硬件的功能為WIFI定位,所述定位數(shù)據(jù)格式包括WIFI定位數(shù)據(jù)格式。
應(yīng)用本申請實施例模擬器模擬定位方法和裝置時,通過獲取定位位置信息,將定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式,并傳輸至對應(yīng)的虛擬定位模塊,響應(yīng)于接收到的應(yīng)用的定位數(shù)據(jù)調(diào)用指令,向該應(yīng)用返回定位數(shù)據(jù),從而實現(xiàn)在沒有定位硬件的情況下也能實現(xiàn)模擬定位,便于需要訪問用戶位置的應(yīng)用程序訪問位置。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本申請。
附圖說明
此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本申請的實施例,并與說明書一起用于解釋本申請的原理。
圖1是Android存在定位硬件模塊的定位示意圖。
圖2是本申請根據(jù)一示例性實施例示出的一種模擬器模擬定位方法的流程圖。
圖3是本申請根據(jù)一示例性實施例示出的一種模擬器模擬定位裝置的框圖。
圖4是本申請根據(jù)一示例性實施例示出的一種用于模擬器模擬定位的裝置的結(jié)構(gòu)示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術(shù)語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
為了更好理解本發(fā)明所公開的模擬器模擬定位方法及裝置,先對Android中GPS的數(shù)據(jù)結(jié)構(gòu)進行說明。如圖1所示,圖1是Android存在定位硬件模塊的定位示意圖。Android中需要獲取當(dāng)前位置信息的APP通過請求定位,通知到Android的framework層,并傳輸?shù)絪ystem sever的定位服務(wù)Location Manager Service,定位服務(wù)請求GPS HAL層,最終通過Linux Kernel GPS驅(qū)動定位硬件獲取當(dāng)前的定位信息回傳到Android中的APP。
由于Android模擬器可以讓用戶不需使用物理設(shè)備即可預(yù)覽、開發(fā)、測試和運行Android應(yīng)用程序,因此Android模擬器運用的越來越廣泛。例如,可以在VirtualBox上安裝并且執(zhí)行Android操作系統(tǒng)。模擬器中很多APP需要訪問用戶的位置信息,滿足APP對定位功能的需求。然而,Android模擬器運行在PC端,沒有對應(yīng)的定位硬件模塊,例如,沒有GPS定位硬件,沒有SIM卡,如果Android客戶端APP需要訪問當(dāng)前的位置信息,Android模擬器無法實現(xiàn)定位,從而無法滿足APP對定位功能的需求。
為了避免相關(guān)技術(shù)中無法在模擬器中實現(xiàn)定位的缺陷,本申請?zhí)峁┮环N模擬器模擬定位方法,通過獲取定位位置信息,將定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式,并傳輸至對應(yīng)的虛擬定位模塊,響應(yīng)于接收到的應(yīng)用的定位數(shù)據(jù)調(diào)用指令,向該應(yīng)用返回定位數(shù)據(jù),從而實現(xiàn)在沒有定位硬件的情況下也能實現(xiàn)模擬定位,便于需要訪問用戶位置的應(yīng)用程序訪問位置。
以下對本申請所提供的方案進行詳細說明。
如圖2所示,圖2是本申請根據(jù)一示例性實施例示出的一種模擬器模擬定位方法的流程圖,所述方法包括步驟201至步驟203:
在步驟201中,從外部獲取定位位置信息。
在步驟202中,將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式,傳輸至對應(yīng)的虛擬定位模塊;所述虛擬定位模塊用于模擬相應(yīng)的定位硬件的功能。
在步驟203中,響應(yīng)于接收到的應(yīng)用的定位數(shù)據(jù)調(diào)用指令,向所述應(yīng)用返回定位數(shù)據(jù)。
其中,定位位置信息是用于模擬定位的位置信息,定位位置信息不是由系統(tǒng)本身定位獲得,而是外部輸入獲得。例如,用戶可以輸入需要模擬的定位地址,基于用戶輸入的定位地址,利用第三方地圖應(yīng)用確定定位地址對應(yīng)的經(jīng)緯度信息,將該經(jīng)緯度新確定為定位位置信息。第三方地圖應(yīng)用可以是百度地圖、高德地圖、谷歌地圖等。
虛擬定位模塊用于模擬相應(yīng)的定位硬件的功能,不同的虛擬定位模塊對應(yīng)不同的定位數(shù)據(jù)格式。例如,定位硬件的功能為GPS定位時,所述定位數(shù)據(jù)格式為GPS定位數(shù)據(jù)格式。定位硬件的功能為基站定位時,定位數(shù)據(jù)格式為基站定位數(shù)據(jù)格式。定位硬件的功能為WIFI定位時,定位數(shù)據(jù)格式為WIFI定位數(shù)據(jù)格式。
因此,需要先將獲取的定位位置信息轉(zhuǎn)換為預(yù)先設(shè)置的定位數(shù)據(jù)格式,定位數(shù)據(jù)格式根據(jù)虛擬定位模塊模擬的定位硬件的功能而定。將定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式后,可以傳輸至對應(yīng)的虛擬定位模塊。
以下分別對三種虛擬定位模塊進行介紹。
第一種,所述定位硬件的功能為GPS定位,所述虛擬定位模塊位于HAL層(Hardware Abstraction Layer硬件抽象層),所述定位數(shù)據(jù)格式包括GPS定位數(shù)據(jù)格式。
其中,所述虛擬定位模塊是在HAL層里模擬出的一個GPS模塊。
本實施例是利用虛擬定位模塊模擬GPS定位硬件,在沒有GPS定位硬件的情況下實現(xiàn)模擬定位。具體的,通過獲取定位位置信息,將定位位置信息按照GPS定位數(shù)據(jù)格式傳輸?shù)紸ndroid HAL層中的虛擬定位模塊,實現(xiàn)GPS模擬定位,供用戶層應(yīng)用訪問。由于硬件抽象層獨立于Android系統(tǒng)之外,系統(tǒng)升級不會影響硬件抽象層,因此,模擬定位實現(xiàn)在HAL層使其支持更加獨立,可移植性更強,在將來模擬器系統(tǒng)升級過程中可以避免因Android內(nèi)部代碼變動而需要重新實現(xiàn)的風(fēng)險。
其中,關(guān)于GPS虛擬定位模塊的模擬過程,可以先創(chuàng)建一個如下結(jié)構(gòu)體:
HAL_MODULE_INFO_SYM結(jié)構(gòu)體。
在這個結(jié)構(gòu)體里分別定義模塊類型,模塊方法,設(shè)備類型,定義完成后進行初始化,該GPS模塊就定義完成。
本申請列舉一種模擬GPS定位的過程:
基于用戶輸入的定位地址,利用第三方地圖應(yīng)用確定定位地址對應(yīng)的經(jīng)緯度信息,將該經(jīng)緯度新確定為定位位置信息。
將定位位置信息發(fā)送到定位服務(wù)進程。
定位服務(wù)進程將定位位置信息按照GPS定位數(shù)據(jù)結(jié)構(gòu)體填寫數(shù)據(jù),更新定位數(shù)據(jù)。
system_server(系統(tǒng)服務(wù))通過HAL_MODULE_INFO_SYM獲取到程序HAL相關(guān)信息。其中,HAL_MODULE_INFO_SYM是硬件抽象層抽象出來的一個GPS硬件,對應(yīng)的結(jié)構(gòu)體的名稱。所謂結(jié)構(gòu)體是一段存儲空間,模擬出的這個GPS硬件相關(guān)所有的數(shù)據(jù),都存放在結(jié)構(gòu)體。例如,下一步驟中為模擬出的GPS硬件,創(chuàng)建的模塊方法gps_module_methods,設(shè)備類型hw_device_t等等。
通過HAL_MODULE_INFO_SYM gps_module_methods獲取hw_device_t。
通過hw_devices_t獲取GPS模塊接口。其中,hw_devices_t的作用是給上層應(yīng)用提供接口,所以這個服務(wù)進程可以通過訪問hw_devices_t這個變量,來取得接口,與上層應(yīng)用進行交互。
調(diào)用接口初始化。
GPS HAL層模塊接收到數(shù)據(jù)變化調(diào)用初始化傳入的回調(diào)函數(shù),實現(xiàn)位置信息的模擬定位供上層APP訪問。
本實施例可以根據(jù)用戶設(shè)定的地理位置,按照Android GPS的數(shù)據(jù)結(jié)構(gòu),將地理位置的經(jīng)緯度進行填充,反饋至Android的HAL層,供上層App進行訪問,從而顯示用戶設(shè)定的具體地址,實現(xiàn)模擬地址定位。其中,在獲得定位數(shù)據(jù)后,可以通過Binder、Socket等方式傳輸定位數(shù)據(jù)到HAL層,Android模擬器HAL層模擬GPS模塊實現(xiàn)定位,并更新GPS數(shù)據(jù)到Android模擬器HAL,以便Android APP訪問Android HAL層提供的定位數(shù)據(jù)。
第二種,所述定位硬件的功能為基站定位,所述虛擬定位模塊位于RIL層(radio interface layer,無線接口層),所述定位數(shù)據(jù)格式包括基站定位數(shù)據(jù)格式。
其中,外部獲取的定位位置信息可以是經(jīng)緯度信息,例如通過用戶輸入獲得的定位坐標,也可以是通過第三方地圖應(yīng)用獲取的定位坐標等。用于模擬基站定位硬件功能的虛擬定位模塊為Android系統(tǒng)中原有的電話模塊(telephone)。
在一個例子中,所述將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式包括步驟:從基站數(shù)據(jù)庫中匹配出與所述定位位置信息對應(yīng)的基站標識。
該例子中,可以從本地基站數(shù)據(jù)庫中匹配與位置坐標信息對應(yīng)的基站標識,也可以從網(wǎng)絡(luò)基站數(shù)據(jù)庫中匹配與位置坐標信息對應(yīng)的基站標識等。
在獲得基站標識后,可以通過Binder、socket等方式將基站標識傳輸至RILD進程,RILD進程啟動基站定位硬件服務(wù),將基站標識更新到RILD進程,以便Android APP通過telephone訪問基站數(shù)據(jù)。
本實施例中,由于Android模擬器沒有SIM卡,其基站定位原理同模擬GPS定位相似,通過獲取定位位置信息,將定位位置信息傳送給telephone接口,在RILD進程中按照基站定位數(shù)據(jù)格式填充定位數(shù)據(jù)到RILD進程并更新至telephone模塊,供上層App訪問,實現(xiàn)基站模擬定位。
第三種,所述定位硬件的功能為WIFI定位,所述定位數(shù)據(jù)格式包括WIFI定位數(shù)據(jù)格式。
其中,外部獲取的定位位置信息可以是經(jīng)緯度信息,例如通過用戶輸入獲得的定位坐標,也可以是通過第三方地圖應(yīng)用獲取的定位坐標等。用于模擬WIFI定位硬件功能的虛擬定位模塊為Android系統(tǒng)中原有的WIFI定位模塊。
在一個例子中,所述將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式包括步驟:獲取與所述位置坐標信息對應(yīng)的WIFI的SSID(Service Set Identifier,服務(wù)集標識)。
可見,將定位位置信息轉(zhuǎn)換為WIFI虛擬定位模塊所需的定位數(shù)據(jù)。
本實施例通過用戶設(shè)定具體的定位地址信息,按照WIFI定位數(shù)據(jù)格式發(fā)送至WIFI定位模塊以供上傳APP訪問,實現(xiàn)WIFI模擬定位。
以上實施方式中的各種技術(shù)特征可以任意進行組合,只要特征之間的組合不存在沖突或矛盾,但是限于篇幅,未進行一一描述,因此上述實施方式中的各種技術(shù)特征的任意進行組合也屬于本說明書公開的范圍。
與前述模擬器模擬定位方法的實施例相對應(yīng),本申請還提供了模擬器模擬定位裝置及其所應(yīng)用的電子設(shè)備的實施例。
如圖3所示,圖3是本申請根據(jù)一示例性實施例示出的一種模擬器模擬定位裝置的框圖,所述裝置包括:
信息獲取模塊310,用于從外部獲取定位位置信息。
信息傳輸模塊320,用于將所述定位位置信息轉(zhuǎn)換為預(yù)先設(shè)定的定位數(shù)據(jù)格式,傳輸至對應(yīng)的虛擬定位模塊;所述虛擬定位模塊用于模擬相應(yīng)的定位硬件的功能。
信息響應(yīng)模塊330,用于響應(yīng)于接收到的應(yīng)用的定位數(shù)據(jù)調(diào)用指令,向所述應(yīng)用返回定位數(shù)據(jù)。
在一個可選的實現(xiàn)方式中,所述定位硬件的功能為GPS定位,所述虛擬定位模塊位于HAL層,所述定位數(shù)據(jù)格式包括GPS定位數(shù)據(jù)格式。
在另一個可選的實現(xiàn)方式中,所述定位硬件的功能為基站定位,所述虛擬定位模塊位于RIL層,所述定位數(shù)據(jù)格式包括基站定位數(shù)據(jù)格式。
在另一個可選的實現(xiàn)方式中,所述定位硬件的功能為WIFI定位,所述定位數(shù)據(jù)格式包括WIFI定位數(shù)據(jù)格式。
在另一個可選的實現(xiàn)方式中,所述信息傳輸模塊320,用于:
從基站數(shù)據(jù)庫中匹配出與所述定位位置信息對應(yīng)的基站標識。
在另一個可選的實現(xiàn)方式中,所述信息傳輸模塊320,用于:
獲取與所述位置坐標信息對應(yīng)的WIFI的SSID。
上述裝置中各個模塊的功能和作用的實現(xiàn)過程具體詳情見上述方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理模塊,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)模塊上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
如圖4所示,圖4是本申請根據(jù)一示例性實施例示出的一種用于模擬器模擬定位的裝置400的結(jié)構(gòu)示意圖。例如,裝置400可以被提供為電子設(shè)備。參照圖4,裝置400包括處理組件422,其進一步包括一個或多個處理器,以及由存儲器432所代表的存儲器資源,用于存儲可由處理部件422的執(zhí)行的指令,例如應(yīng)用程序。存儲器432中存儲的應(yīng)用程序可以包括一個或一個以上的每一個對應(yīng)于一組指令的模塊。此外,處理組件422被配置為執(zhí)行指令,以執(zhí)行上述模擬器模擬定位方法。
裝置400還可以包括一個電源組件426被配置為執(zhí)行裝置400的電源管理,一個有線或無線網(wǎng)絡(luò)接口450被配置為將裝置400連接到網(wǎng)絡(luò),和一個輸入輸出(I/O)接口458。裝置400可以操作基于存儲在存儲器432的操作系統(tǒng),例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM或類似。
本領(lǐng)域技術(shù)人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本申請的一般性原理并包括本申請未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本申請并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進行各種修改和改變。本申請的范圍僅由所附的權(quán)利要求來限制。
以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本申請保護的范圍之內(nèi)。