别忘了添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
代码:
//获取地理位置管理器
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//获取所有可用的位置提供器
List<String> providers = locationManager.getProviders(true);
if(providers.contains(LocationManager.GPS_PROVIDER)){
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
}else if(providers.contains(LocationManager.NETWORK_PROVIDER)){
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
}else{
Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();
return ;
}
//获取Location
Location location = locationManager.getLastKnownLocation(locationProvider);
if(location!=null){
//不为空,显示地理位置经纬度
String s = Util.updateWithNewLocation(mContext, location);
L.d(TAG,"我是地理位置-==="+s);
cityString.setText(s);
}
//监视地理位置变化
locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
/**
* LocationListern监听器
* 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器
*/
LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle arg2) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
//如果位置发生变化,重新显示
String s = Util.updateWithNewLocation(mContext, location);
L.d(TAG,"我是地理位置-==="+s);
cityString.setText(s);
}
};
界面销毁时候别玩器取消监听
@Override
protected void onDestroy() {
super.onDestroy();
if(locationManager!=null){
//移除监听器
locationManager.removeUpdates(locationListener);
}
}
根据location获取地理信息:
public static String updateWithNewLocation(Context context,Location location) {
String coordinate;
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 {
List<Address> addresses = 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";
}
return coordinate + "\n"
+ addressStr;
}