android獲取當前位置的三種方式

2021-06-16 10:18:27 字數 2491 閱讀 6114

1.gps定位

2.基站定位

此類位置的獲取有賴於手機無線通訊訊號,當手機處在訊號覆蓋範圍內,手機可以獲得該區域(即通訊術語中的「小區」)的識別號。因為這些識別號是惟一的,因此可以將識別號和地理座標對應起來,因此根據識別號就可以知道地理位置。但是誤差比較大。

在android當中,大部分和通訊網路相關的資訊都需要經過一項系統服務,即telephonemanager來獲得。

telephonymanager mtelman = (telephonymanager) getsystemservice(context.telephony_service);

string operator = mtelman.getnetworkoperator();

string mcc = operator.substring(0, 3);

string mnc = operator.substring(3);

gsmcelllocation location = (gsmcelllocation) mtelman.getcelllocation();

int cid = location.getcid();

int lac = location.getlac();

通過上面的方法,可獲得mcc、mnc、cid、lac,對照geolocation api network protocol,剩下不多的引數也可以獲得,發起請求後根據響應內容即可得到地理位置資訊。

請求(request)的資訊如下:

,,,,,,],

"host":"maps.google.com",

"version":"1.1.0"}

響應(response)的資訊如下:

,"access_token":"2:61teaw-ronct1_w-:jvpp2_jq5a0l-5jk"}

3.wifi定位

其原理是首先收集每個wifi無線接入點的位置,對每個無線路由器進行唯一的標識,在資料庫中註明這些接入點的具體位置。 使用時,一旦發現有wi-fi接入點,則進入到資料中檢視匹配的記錄,進而得到位置資訊。

wifi定位主要取決於節點(node)的實體地址(mac address)。與提供telephonemanager一樣,android也提供了獲取wifi資訊的介面:wifimanager。

wifimanager wifiman = (wifimanager) getsystemservice(context.wifi_service);

wifiinfo info = wifiman.getconnectioninfo();

string mac = info.getmacaddress();

string ssid = info.getssid();

通過上面的方法,即可獲得必要的請求引數。

發出的請求(request)資訊如下:

],"host":"maps.google.com","version":"1.1.0"}

響應(response)的資訊如下:

,"access_token":"2:wrr36ynoz_d9mbw5:prerdamjxi8l76mu"}

---------以上簡單介紹了android中獲取位置的三種定位方式。實際開發中可利用android.location中的locationmanager類,該類封裝了地理位置資訊的介面,提供了gps_provider和 network_provider。

如果開發的應用需要高精確性,那麼可使用gps_provider,但這也意味著應用無法在室內使用,待機時間縮短,響應時間稍長等問題;

如果開發的應用需要快速反應,對精度要求不怎麼高,並且要盡可能節省電量,那麼使用network_provider是不錯的選擇。

這裡提一下,還有乙個 passive_provider,在實際應用中較少使用。

1.如下**就是設定從network中獲取位置:

locationmanager mlocman = (locationmanager) getsystemservice(context.location_service);

mlocman.requestlocationupdates(locationmanager.network_provider,0,0, mloclis);

需要對應的許可權:android.permission.access_coarse_location

2.如下**就是設定從gps獲取位置:

locationmanager mlocman = (locationmanager) getsystemservice(context.location_service);

mlocman.requestlocationupdates(locationmanager.gps_provider,0,0, mloclis);

需要對應的許可權:android.permission.access_fine_location

如果**裡使用了兩個 provider,則只需要乙個許可權即可:android.permission.access_fine_location。

以下是整個過程的**:

iOS獲取當前的位置

在ios中獲取當前的位置資訊,包括 維度 經度 城市 街道 路口等資訊 使用步驟 1 2 3 manager cllocationmanager alloc init manager.delegate self manager startupdatinglocation 由於在ios8中,需要開發者...

IOS獲取當前位置

ios支援三種檢測當前位置的方式 手機基站 wi fi 和gps,其中gps是經度最高的,同時也是最耗費手機電量的。一般情況下在室內是無法通過gps獲取位置資訊的,通過wi fi獲取位置的原理是通過網路提供商的ip位址資訊來獲取位置,經度不是很高,最後是通過手機基站獲取位置,手機開機後會連線附近的基...

iPhone之獲取當前位置

來自 首先,加入地圖包 介面 import import inte ce view30 uiviewcontroller end 實現 void viewdidload theregion.center locationmanager location coordinate locationmana...