如果应用需要定位城市,可以这么做:
先获取LocationManager 然后根据可用的位置提供器获取Location,代码如下
private LocationManager locationManager;
private static Location location
private String locationProvider;
private boolean flag=false;
/** 定位 */
private void GetLocation(){
//获取地理位置管理器
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{
//没有可用
}
//获取Location
location = locationManager.getLastKnownLocation(locationProvider);
//可查看是否授权获取定位信息
flag = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0;
//在更新检测后,才去获取地理位置
if(location!=null){
//不为空,获取地理位置经纬度
GetCity(location);
}else{
}
//监视地理位置变化 --不需要用到
// locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
}
/**
* 显示地理位置经度和纬度信息
* @param location
*/
private void GetCity(Location location){
String cit=null;
//当location对象不为空-获取位置之后--获取页面数据
if(location!=null){
String latLongString = null;
String locationStr = "维度:" + location.getLatitude() +"\n"
+ "经度:" + location.getLongitude();
System.out.println("经纬度 "+locationStr);
List<Address> addList = null;
Geocoder ge = new Geocoder(context);
try {
//根据经纬度-获取地理位置
addList = ge.getFromLocation(location.getLatitude(), location.getLongitude(),1);
} catch (IOException e) {
e.printStackTrace();
}
if(addList!=null && addList.size()>0){
for(int i=0; i<addList.size(); i++){
Address ad = addList.get(i);
//获取城市
latLongString = ad.getLocality();
}
}
if(latLongString!=null){
//截取城市名
String GlobalVariable.City=latLongString.substring(0, latLongString.indexOf("市"));
System.out.println("当前位置 "+GlobalVariable.City);
// }
}
}else{
//当用户拒绝定位权限时进行其他操作
}
}
/**
* 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) {
//如果位置发生变化,重新显示
GetCity(location);
}
};