在前文android定位功能(一)中,已經大致介紹了一下在android平台中,和定位功能相關的類,並舉例獲取了位置資訊。但是前文是基於criteria定製了乙個標準,通過getbestprovider()方法由android系統自動獲取最符合criteria的locationprovider,從而實現了定位功能。這樣的做法能最大限度的保證定位功能的可實現性,但是卻無法保證獲取到的位置資訊有最大的準確度。因為除了gps外,其他定位方式都或多或少存在著位置偏移。
在實現gps定位前,先了解一下gps的部分特性:
1. gps定位需要依靠3顆或3顆以上的衛星。
2. gps定位受環境影響較大,在晴朗的空地上,較容易搜尋到衛星,而在室內通常是無法搜尋到衛星的。
3. gps定位需要使用gps功能模組,而gps功能模組的耗電量是巨大的。
在android系統中,實現gps定位的思路應該是:
1. 獲取gps的location provider。
2. 講此provider傳入到requestlocationupdates()方法,讓android系統獲知搜尋位置方式。
3. 建立實現了gpsstatus.listener介面的物件,重寫ongpsstatuschanged()方法,向locationmanager新增次***,檢測衛星狀態。(可選步驟)
根據以上思路,仿照android定位功能(一)中的例子,可以很容易的得到以下實現**:(此**的實現前提是gps功能模組處於開啟狀態)
1通過以上**中的注釋部分,可以清晰的知道android定位功能裡相關方法的具體含義。希望對大家有用。public
class
mainactivity
extends
activity
21//
增加gps狀態***
22locationmanager.addgpsstatuslistener(gpslistener);
2324
//直到獲得最後一次位置資訊為止,如果未獲得最後一次位置資訊,則顯示預設經緯度
25//
每隔10秒獲取一次位置資訊
26while
(true
)else
36try
catch
(interruptedexception e) 41}
42}4344
private
gpsstatus.listener gpslistener
=new
gpsstatus.listener()
67toast.maketext(mainactivity.
this, "
satellite count:"+
count, toast.length_short).show();
68break;69
//停止定位事件
70case
gpsstatus.gps_event_stopped:
71log.d(
"location",
"gps_event_stopped");
72break;73
}74}75
};76
7778
//建立位置***
79private
locationlistener locationlistener
=new
locationlistener()
8586
//provider失效時呼叫
87@override
88public
void
onproviderdisabled(string provider)
9192
//provider啟用時呼叫
93@override
94public
void
onproviderenabled(string provider)
9798
//狀態改變時呼叫
99@override
100public
void
onstatuschanged(string provider,
intstatus, bundle extras)
103};
104}
另外,因為gps的自身特性,此**在室內幾乎無法定位,所以建議再真正的實際專案裡,至少使用network和gps兩種不同的location provider實現定位功能。
Android定位功能總結
前言 步驟一 宣告許可權 android name android.permission.access fine location 注 在android 6.0以上,除了在androidmanifest.xml中進行許可權的宣告之外,這個許可權還需要在 去進行校驗,徵詢使用者的同意 步驟二 獲取lo...
iOS 定位功能
最近做的專案裡用到了定位,不是地圖定位,只是單純的獲取經緯度,甚至都不用轉化為具體的地理資訊,原本以為很好做的,但是寫了幾個小時才搞好,中間遇到幾個問題,現在記下來吧。首先乙個問題是,在模擬器中,遵守了協議,設定了 卻不走 方法,為什麼呢,這是因為xcode公升級造成的定位許可權設定問題。公升級xc...
android 定位服務
目前,對於定位主要有三種實現方式 通過網路 基站和gps來獲取到所有玩家的經緯度,然後傳送給伺服器計算,以此來實現附近的人資訊展示功能。最開始做的時候,使用了android自帶的定位服務 locationmanager locationmanager locationmanager getsyste...