Android 地理位置定位

2021-07-22 02:46:27 字數 3639 閱讀 9219

android官方提供的定位sdk

1.先在manifest.xml中申請許可權(targetsdkversion 為23或者更高的需要動態申請許可權)

android:name="android.permission.access_fine_location" />

android:name="android.permission.internet" />

2.呼叫context的getsystemservice()方法來獲得locationmanager
locationmanager = mlocationmanager = (locationmanager)getsystemservice(context.location_service)
3.獲取定位服務提供者locationprovider

大體上,locationmanager有三種常用方法獲得locationprovider

1.獲取所有provider

listproviders = mlocationmanager.getproviders(true);
2.根據指定條件來獲取最接近的provider,criteria是過濾條件。

criteria criteria=new criteria();

//設定定位精確度 criteria.accuracy_coarse比較粗略,criteria.accuracy_fine則比較精細

criteria.setaccuracy(criteria.accuracy_fine);

criteria.setspeedrequired(false);//設定是否要求速度

criteria.setcostallowed(false);// 設定是否允許運營商收費

criteria.setbearingrequired(false);//設定是否需要方位資訊

criteria.setaltituderequired(false);//設定是否需要海拔資訊

criteria.setpowerrequirement(criteria.power_low);// 設定對電源的需求

string provider = mlocationmanager.getbestprovider(crite, true);

3.locationprovider getprovider(string name); 根據名稱來直接獲取指定的locationprovider

string provider = mlocationmanager.getprovider(locationmanager.gps_provider);
有三種常用的provider是:

1. gps_provider:

這個就是手機裡有gps晶元,然後利用該晶元向衛星請求定位當前的地理位置。但是對請求訊號強度要求比較高,在室內gps定位基本沒用,百分之就是的可能獲取的是null。
2. network_provider:
網路定位,通常是利用手機基站和wifi節點的位址來大致定位位置。這種定位方式取決於將基站或wifi節點資訊翻譯成位置資訊的伺服器的能力。但由於目前發部分android手機沒有安裝google官方的location manager庫,大陸網路也無法訪問到google的伺服器,自然該方法基本上沒法實現定位。
3. passive_provider:

4.獲取provider提供的位置資訊(注意:可能會返回null)

location location = mlocationmanager.getlocation(provider);
locationmanager還有幾個常用方法:

location getlastknownlocation(string provider)

根據provider獲取最近的乙個location,如果本次定位失敗,則返回上次定位成功時的位置資訊,如果從未成功過則返回null
void requstlocationupdates(string provider,long mintime,long mindistance,locationlistener listener)

//繫結監聽,有4個引數    

//引數1,裝置:有gps_provider和network_provider兩種

//引數2,位置資訊更新週期,單位毫秒

//引數3,位置變化最小距離:當位置距離變化超過此值時,將更新位置資訊

//引數4,監聽

//備註:引數2和3,如果引數3不為0,則以引數3為準;引數3為0,則通過時間來定時更新;兩者為0,則隨時重新整理

// 1秒更新一次,或最小位移變化超過1公尺更新一次;

//注意:此處更新準確度非常低,推薦在service裡面啟動乙個thread,在run中sleep(10000);然後執行handler.sendmessage(),更新位置

mlocationmanager.requestlocationupdates(locationmanager.gps_provider, 1000, 1, locationlistener);

locationlistener 位置***

locationlistener locationlistener = new locationlistener()  

// 當gps關閉時觸發

public

void

onproviderdisabled(string arg0)

// 當gps開啟時觸發

public

void

onproviderenabled(string arg0)

// 當位置狀態改變時觸發

public

void

onstatuschanged(string arg0, int arg1, bundle arg2)

}

};

可以通過一段**遍歷比較三種provider提供的位置資訊,並返回精度較高的結果
listproviders = mlocationmanager.getproviders(true);

location location = null;

// 遍歷三種定位方式的資訊

for (string provider : providers)

log.d(tag,"provider:" + provider + ",經度:" + l.getlongitude() + ",緯度:" + l.getlatitude());

// 返回精度更高的定位資訊

if (location == null || l.getaccuracy() < location.getaccuracy())

}return location;

locationmanager可以使用isproviderenabled方法判斷是否開啟了gps
if(!mlocationmanager.isproviderenabled(locationmanager.gps_provider))

地理位置 android 定位的幾種方式介紹

複製鏈結 nei511896752 367主題4 聽眾1480 積分 管理員 電梯直達 樓主 只看該作者 倒序瀏覽 www.androidkaifa.com,安卓開發網 開發中對於地圖及地理位置的定位是我們經常要用地,地圖功能的使用使得我們應用功能更加完善,下面 www.androidkaifa.c...

android獲取地理位置資訊

移動應用可以通過gps或者網路的方式獲取當前位置資訊,一般來說,通過gps獲得地理位置往往精確度較高,但是在通訊條件不好的地方可能獲取不到,而通過網路資訊獲取地理位置精度低於gps,但是只要網路通暢,即可保證能獲取到地理位置資訊 想獲取地理位置資訊,首先要在androidmanifest.xml中加...

洋山港 地理位置

洋山港區位於浙江省嵊泗縣境內。由大洋山港口區和小洋山港口區組成。可供開發的深水岸線4900公尺,是上海國際航運中心的深水港區。位於嵊泗海域西部大洋山島的北岸。東北距縣城21.41海浬,西北距上海市蘆潮港18.9海浬。大洋山島海岸線總長16697公尺 其中基岩10214公尺 可利用岸線3200公尺,聖...