android官方提供的定位sdk
1.先在manifest.xml中申請許可權(targetsdkversion 為23或者更高的需要動態申請許可權)
android:name="android.permission.access_fine_location" />
android:name="android.permission.internet" />
2.呼叫context的getsystemservice()方法來獲得locationmanagerlocationmanager = 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方法判斷是否開啟了gpsif(!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公尺,聖...