Android中提供GPS定位服務,同時開發者可以對獲得的位置信息進行解析,可以獲得位置的詳細信息。
1.gps定位
在Eclipse中建立android應用程序。android sdk中提供了locationmanager來獲得系統提供的定位服務,可以通過gps、network等定位。通過下面的代碼能夠獲取location對象,而通過location可以獲得經緯度信息。

1 LocationManager loactionmanager=(LocationManager) getSystemService(Context.LOCATION_SERVICE); 2 tv_msg=(TextView)findViewById(R.id.textView1); 3 Criteria criteria=new Criteria(); 4 criteria.setAccuracy(Criteria.ACCURACY_FINE); 5 criteria.setAltitudeRequired(false); 6 criteria.setBearingRequired(false); 7 criteria.setCostAllowed(false); 8 criteria.setPowerRequirement(Criteria.POWER_LOW); 9 String provider=loactionmanager.getBestProvider(criteria, true); 10 Location location=loactionmanager.getLastKnownLocation(provider);
通過Criteria為對象指定一些參數。criteria提供若干方法:
(1)public void setAccuracy(int accuracy)
位置解析的精度。Criteria.Accuracy_Fine 精確模式,Criteria.Accuracy_Coarse 模糊模式。
(2)public void setAltitudeRequired(boolean altitude)
是否提供海拔高度信息
(3)public void setBearingRequired(boolean)
是否提供方向信息
(4)public void setPowerRequirement(int level)
電池消耗,無、低、中、高,參數 Criteria. NO_REQUIREMENT, Criteria. POWER_LOW, Criteria.POWER_MEDIUM, or Criteria. POWER_HIGH
(5) public void setCostAllowed(boolean)
是否允許運行商計費。
2.gps位置解析
以前進行位置解析的時候,有人通過訪問Google提供的服務進行位置解析,那樣真的比較耗時,對於手機用戶來說,體驗真的很重要,今天無意中看見可以通過別的方法來進行位置的解析。android sdk 中提供了 Geocoder類來進行位置的解析。通過geocoder的getFromLocation(double lattitude,double longtitude,int maxresults)來獲取地址列表,三個參數分別為:緯度、經度、返回的結果數。同時geocoder的getlocationfrom方法是同步的,因此,它們進行查找時將會阻礙線程,所以不應該放入UI線程,應該放入后台,也就是通過異步線程來實現。

1 public class GeocodeAddress extends AsyncTask<Location, Void, String> 2 { 3 4 @Override 5 protected void onPreExecute() { 6 // TODO Auto-generated method stub 7 super.onPreExecute(); 8 } 9 @Override 10 protected String doInBackground(Location... params) { 11 // TODO Auto-generated method stub 12 if(params[0]!=null) 13 { 14 Geocoder geocoder=new Geocoder(MainActivity.this); 15 try { 16 List<Address> address=geocoder.getFromLocation(params[0].getLatitude(), params[0].getLongitude(), 1); 17 msg=""; 18 if(address.size()>0) 19 { 20 msg+="經度:"+String.valueOf(address.get(0).getLongitude()*1E6)+"\n"; 21 msg+="緯度:"+String.valueOf(address.get(0).getLatitude()*1E6)+"\n"; 22 msg+="國家:"+address.get(0).getCountryName()+"\n"; 23 msg+="省:"+address.get(0).getAdminArea()+"\n"; 24 msg+="城市:"+address.get(0).getLocality()+"\n"; 25 msg+="名稱:"+address.get(0).getAddressLine(1)+"\n"; 26 msg+="街道:"+address.get(0).getAddressLine(0); 27 return msg; 28 } 29 } catch (IOException e) { 30 // TODO Auto-generated catch block 31 e.printStackTrace(); 32 } 33 } 34 return null; 35 } 36 @Override 37 protected void onPostExecute(String result) { 38 // TODO Auto-generated method stub 39 if(result!=null&&result!="") 40 { 41 tv_msg.setText(result); 42 } 43 } 44 45 }
這里的geoceAddress 是繼承asynctask異步類,參數分別為:location,傳進來的參數類型;Void,異步線程處理的進度,String,返回的結果類型。
doInBackground(Params) :用來處理比較耗時的操作,返回結果
onPostExecute:獲取處理的結果,並可以進行ui的更新。
onProgressUpdate:數據處理的進度
3.位置反向解析
位置反向解析,是指通過位置信息獲取經緯度地址。
List<Address> geoaddress= geocoder.getFromLocationName(String locationname, int maxresult);
參數:locationname:位置的名稱信息,如南京大學,北京大學等。
maxresults:返回的結果數。從1到5.
double lattitude=geoaddress.get(0).getLatitude();//獲取緯度
double longtitude=geoaddress.get(0).getLongitude();//獲取經度
更多詳細,請參照androidsdk文檔。