- 相關(guān)推薦
安卓手機(jī)GPS定位慢不定位解決方法
手機(jī)刷了新版rom后,發(fā)現(xiàn)gps定位極其困難,有時甚至只能在wifi環(huán)境下才能成功搜星定位。其實究其原因,是因為很多新版rom并非面向亞洲地區(qū)發(fā)行的官方版rom,但是你只需打上這個gps定位補(bǔ)丁即可解決問題。
軟件名稱:android版gps定位補(bǔ)丁
文件格式:conf
支持平臺:android
一、首先,你需要給你的安卓手機(jī)裝上文件管理器root explorer,也就是高手口中常說的“r.e管理器”【r.e管理器點擊下載】。它可以獲取系統(tǒng)的最高權(quán)限,以便對手機(jī)系統(tǒng)文件進(jìn)行編輯和修改。而它的使用方法也很簡單,類似于pc端的“我的電腦”,
二、用rootexplorer進(jìn)入并打開“/etc/http://emrowgh.comnf”文件,重點觀察一下“ntp_server”那一行,其等號后邊清晰注明了“north-america”(北美),這就是問題的關(guān)鍵。這說明在我們新刷入的rom中,gps網(wǎng)絡(luò)指向了北美洲,所以才會出現(xiàn)定位緩慢甚至無法定位的問題。
三、知道問題就好辦了,請出要用到的主角 gps定位補(bǔ)丁。【rgps定位補(bǔ)丁點擊下載】下載并解壓后,將“http://emrowgh.comnf”拷貝至手機(jī)sd卡根目錄;再次進(jìn)入rootexplorer,復(fù)制該文件并分別覆蓋“/etc/”以及“/system/etc/”這兩個路徑下的同名文件即可成功搞定。
Android 手-機(jī)-定-位慢的解決方法2017-03-22 21:03 | #2樓
影響手-機(jī)-定-位速度的因素有很多,包括所處室內(nèi)外環(huán)境、網(wǎng)絡(luò)狀態(tài)等。但這些都是外在因素,是相對比較容易改變的。其實影響手-機(jī)-定-位速度的還有一個內(nèi)在因素,就是手機(jī)最基本的定位方式—gps定位所使用的ntp服務(wù)器。經(jīng)查看,發(fā)現(xiàn)很多國內(nèi)的手機(jī)所使用的ntp服務(wù)器是北美的服務(wù)器,連接速度很慢甚至連接不上,自然影響手-機(jī)-定-位。解決這一內(nèi)在問題的方法也比較簡單,就是修改使用訪問速度較快的國內(nèi)的ntp服務(wù)器,具體為修改手機(jī)/etc/http://emrowgh.comnf文件里的配置信息,例如使用http://emrowgh.com等。
另轉(zhuǎn)一篇使用android定位方式等文章:http://emrowgh.com
做移動互聯(lián)網(wǎng)就不太可能不碰手機(jī)端的開發(fā)。上周為了項目需要,俺也挽袖子掄胳膊開始寫起了android程序,還好有java基礎(chǔ),倒也上手快,寫了幾個小程序,主要都是關(guān)于定位方面的。
網(wǎng)上也搜得到一些相關(guān)的文章和教程,但給出的例子效果不太好,而且感覺只有其表,卻不明其理。因此寫出此文,分享一些我的經(jīng)驗。雖然是以android為主,但是我想對其它平臺的開發(fā)也應(yīng)該有些幫助。這篇文章側(cè)重于制定一個合理的定位方案。
手-機(jī)-定-位的方式
先科普一些基礎(chǔ)知識吧。
最簡單的手機(jī)定 位方式當(dāng)然是通過gps模塊(現(xiàn)在大部分的智能機(jī)應(yīng)該都有了)。gps方式準(zhǔn)確度是最高的,但是它的缺點也非常明顯:1,比較耗電;2,絕大部分用戶默認(rèn) 不開啟gps模塊;3,從gps模塊啟動到獲取第一次定位數(shù)據(jù),可能需要比較長的時間;4,室內(nèi)幾乎無法使用。這其中,缺點2,3都是比較致命的。需要指 出的是,gps走的是衛(wèi)星通信的通道,在沒有網(wǎng)絡(luò)連接的情況下也能用。
另外一種常見的定位方式是基站定位。大致思路就是采集到手機(jī)上的基站id號(cellid)和其它的一些信息(mnc,mcc,lac等等),然后通過網(wǎng)絡(luò)訪問一些定位服務(wù),獲取并返回對應(yīng)的經(jīng)緯度坐標(biāo)。基站定位的精確度不如gps,但好處是能夠在室內(nèi)用,只要網(wǎng)絡(luò)通暢就行。
還有wifi定位。和基站定位類似,這種方式是通過獲取當(dāng)前所用的wifi的一些信息,然后訪問網(wǎng)絡(luò)上的定位服務(wù)以獲得經(jīng)緯度坐標(biāo)。因為它和基站定位其實都需要使用網(wǎng)絡(luò),所以在android也統(tǒng)稱為network方式。
最后需要解釋一點的是agps方式。很多人將它和基站定位混為一談,但其實agps的本質(zhì)仍然是gps,只是它會使用基站信息對獲取gps進(jìn)行輔助,然后還能對獲取到的gps結(jié)果進(jìn)行修正,所以agps要比傳統(tǒng)的gps更快,準(zhǔn)確度略高。
android提供的定位接口
在寫第一個程序之前,我對android的幻想是這樣的:提供了一個函數(shù),能夠讓我直接從gps模塊中讀取經(jīng)緯度坐標(biāo),還有一個函數(shù),能夠直接訪問網(wǎng)絡(luò),獲得基站定位的結(jié)果。所以,我只需要調(diào)用調(diào)用函數(shù)就可以搞定這一切。
現(xiàn)實和理想總是有很大的差距。android上的開發(fā)完全不是這么回事兒。前面提到過,gps模塊從啟動到獲取數(shù)據(jù)之間時間會比較長,可能有2~3分鐘時間,所以,如果真有這么一個函數(shù),那么你的程序可能會被這個函數(shù)阻塞幾分鐘。我想正是基于這樣的考慮,android上要想獲取定位信息,必須使用異步方式。
《安卓手機(jī)GPS定位慢不定位解決方法》全文內(nèi)容當(dāng)前網(wǎng)頁未完全顯示,剩余內(nèi)容請訪問下一頁查看。
代碼大概是這個樣子:
locmanager.requestlocationupdates(locationmanager.gps_provider,0,0, loclistener);這是從網(wǎng)上隨便摘一段。簡單解釋一下代碼:
首先,你需要創(chuàng)建一個locationmanager;
然后定義出自己的locationlistener,locationlistener包涵了好幾個成員函數(shù),它們都是回調(diào)函數(shù)。最重要的一個是“onlocationchanged”,這個函數(shù)是在android獲取了新的location信息之后調(diào)用的,你可以在這個函數(shù)內(nèi)來實現(xiàn)自己想要的功能。比如,你可以定義一個內(nèi)部location變量,一旦這個函數(shù)被調(diào)用,就將內(nèi)部location變量設(shè)置成最新的值;
最后,調(diào)用locationmanager.requestlocastionupdates,它其實是將定義的locationlistener注冊到android中。在上面的代碼中,這句話是說讓locationlistener監(jiān)聽gps_provider的變化。gps_provider對應(yīng)于android上的gps模塊獲取位置信息,還有一個network_provider表示通過network方式獲取位置信息。
問題
那么接下來就有問題了,什么時候能夠真正獲得手機(jī)的 定位經(jīng)緯度呢?等著onlocationchanged被調(diào)用吧。那它什么時候會被調(diào)用?沒人知道。我寫過一個小程序,測試network方式下注冊過 listener之后(requestlocationupdates函數(shù))和onlocationchanged被調(diào)用之間的時間間隔。測試的網(wǎng)絡(luò)條件 很好。反復(fù)觀察了幾次,大部分都可以在幾十毫秒內(nèi)就返回了,但也有一些時候,時間間隔長達(dá)幾十秒。這意味著,你的用戶需要等上幾十秒才能有返回。
所以,第一個需要注意的地方是,不要一直等待你的回調(diào)函數(shù)onlocationchanged被調(diào)用。你需要設(shè)置一個timeout機(jī)制。
這又會引入第二個問題。如果timeout了,但onlocationchanged仍然沒有返回,怎么辦?難道只能提示用戶無法定位嗎?
別急,android還提供了一個函數(shù):getlastknowlocation。這個函數(shù)會返回android平臺最后一次獲取到的位置信息。比如,你可以這樣:
location lastknownlocation = locationmanager.getlastknownlocation(locationmanager.gps_provider);所以,即便onlocationchanged沒有被調(diào)用,我們?nèi)匀豢梢垣@取一個位置信息。當(dāng)然,這里又引出了第三個問題:這個的返回值值得信賴嗎?
如果用過一些lbs或者地圖程序,你會發(fā)現(xiàn)有一個現(xiàn)象:在某些時候你打開地圖結(jié)果被定位到的地方是你上一次使用地圖程序的位置。這就是因為程序是采 用getlastknownlocation獲取的位置。這個問題的解決辦法是,需要定義一個標(biāo)準(zhǔn)判斷獲取到的location是否可信。android的location這個類除了包涵有l(wèi)atitude,longitude,還包含有很多其他的信息,比如何時獲取到的,通過哪種方式獲取到的,等等。程序員完全可以基于這些信息來判斷獲取到的location是否過時或者是否可信。
合理的方案
最后,說一下整體方案。android的官方文檔【1】給出了推薦的方案:
首先注冊自己的locationlistener,讓它同時監(jiān)聽gps_provider和network_provider;
然后可以調(diào)用getlastknownlocation獲得一個location值,這個值可以作為一個備選值;
然后在一段用戶可接受的時間內(nèi),不斷接收從onlocationchanged返回的位置,并同之前的值做比較,選取其中的最佳;
最后,會剩下一個篩選后的最優(yōu)結(jié)果,你需要判斷這個結(jié)果是否可接受。如果可以接受,返回給用戶,如果不行,告訴用戶無法定位。
整個過程你需要定義兩個重要的函數(shù):一個是比較兩個location信息,返回其中好的那個;另一個函數(shù)則用來判斷l(xiāng)ocation信息是否可以被接受。
【安卓手機(jī)GPS定位慢不定位解決方法】相關(guān)文章:
gps定位監(jiān)控值班制度04-22
工作定位面試回答04-18
市場定位與營銷策略05-18
職場的定位標(biāo)準(zhǔn)11-21
確定位置教案11-26
管理者的職能定位04-16
管理者的自我定位04-16
管理者的職責(zé)定位04-16
人員定位系統(tǒng)值班制度04-17
三嚴(yán)三實定位05-07