首先获取LocationManager、Location及Criteria
LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager) getSystemService(context);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locationManager.getBestProvider(criteria,
true);
Location location = locationManager
.getLastKnownLocation(provider);
Criteria 类介绍:
Criteria是“精确度”的意思,Criteria类提供若干个查询条件:
(1) public void setAccuracy(int accuracy)
位置解析的精度,高或低
参数: Criteria. ACCURACY_FINE,精确模式;
Criteria. ACCURACY_COARSE,模糊模式;
(2) public void setAltitudeRequired(booleanaltitudeRequired)
是否提供海拔高度信息,是或否
(3) public void setBearingRequired(boolean bearingRequired)
是否提供方向信息,是或否
(4) public void setCostAllowed(boolean costAllowed)
是否允许运营商计费,是或否
(5) public voidsetPowerRequirement(int level)
电池消耗,无、低、中、高,参数 Criteria. NO_REQUIREMENT,Criteria. POWER_LOW,Criteria. POWER_MEDIUM, orCriteria. POWER_HIGH,
(6) public voidsetSpeedRequired(boolean speedRequired)
是否提供速度信息,是或否
获取地理信息函数:
private void updateWithNewLocation(Location location) {
String coordinate;
TextView loc = (TextView) findViewById(R.id.loc);
String addressStr = "no address \n";
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
coordinate = "Latitude:" + lat + "\nLongitude:" + lng;
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
try {
Listaddresses = geocoder.getFromLocation(latitude,
longitude, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
sb.append(address.getAddressLine(i)).append("\n");
}
sb.append(address.getLocality()).append("\n");
sb.append(address.getLocality()).append("\n");
sb.append(address.getCountryName());
addressStr = sb.toString();
}
} catch (IOException e) {
e.printStackTrace();
}
} else {
coordinate = "no coordinate!\n";
}
loc.setText("your coordinate:\n" + coordinate + "\n"
+ addressStr);
}