public class LocationUtils {
//publicstatic String cityName = "深圳";
//城市名
publicstatic String cityName ;
//城市名
privatestatic Geocodergeocoder;
//此对象能通过经纬度来获取相应的城市等信息
publicstatic void getCNBylocation(Context context){
geocoder =new Geocoder(context);
//用于获取Location对象,以及其他
LocationManager locationManager;
StringserviceName = Context.LOCATION_SERVICE;
//实例化一个LocationManager对象
locationManager =(LocationManager)context.getSystemService(serviceName);
//provider的类型
Stringprovider = LocationManager.NETWORK_PROVIDER;
Criteriacriteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//高精度
criteria.setAltitudeRequired(false);
//不要求海拔
criteria.setBearingRequired(false);
//不要求方位
criteria.setCostAllowed(false);
//不允许有话费
criteria.setPowerRequirement(Criteria.POWER_LOW);
//低功耗
//通过最后一次的地理位置来获得Location对象
Locationlocation = locationManager.getLastKnownLocation(provider);
Stringqueryed_name = updateWithNewLocation(location);
if((queryed_name != null) && (0 !=queryed_name.length())){
cityName =queryed_name;
}
locationManager.requestLocationUpdates(provider, 30000, 50,
locationListener);
//移除监听器,在只有一个widget的时候,这个还是适用的
locationManager.removeUpdates(locationListener);
}
privatefinal static LocationListener locationListener = newLocationListener() {
StringtempCityName;
public voidonLocationChanged(Location location) {
tempCityName= updateWithNewLocation(location);
if((tempCityName != null) &&(tempCityName.length() != 0)){
cityName =tempCityName;
}
}
public voidonProviderDisabled(String provider) {
tempCityName= updateWithNewLocation(null);
if((tempCityName != null) &&(tempCityName.length() != 0)) {
cityName =tempCityName;
}
}
public voidonProviderEnabled(String provider) {
}
public voidonStatusChanged(String provider, int status, Bundle extras) {
}
};
privatestatic String updateWithNewLocation(Location location) {
StringmcityName = "";
double lat =0;
double lng =0;
List<Address> addList = null;
if (location!= null) {
lat =location.getLatitude();
lng =location.getLongitude();
} else{
System.out.println("无法获取地理信息");
}
try {
addList =geocoder.getFromLocation(lat, lng,1);
//解析经纬度
} catch(IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
if (addList!= null && addList.size()> 0) {
for (int i =0; i < addList.size(); i++) {
Address add= addList.get(i);
mcityName +=add.getLocality();
}
}
if(mcityName.length()!=0){
returnmcityName.substring(0, (mcityName.length()-1));
} else{
returnmcityName;
}
}
publicstatic String GetAddr(String latitude, String longitude){
String addr= "";
String url =String.format(
"http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s",
latitude,longitude);
URL myURL =null;
URLConnection httpsConn = null;
try{
myURL = newURL(url);
} catch(MalformedURLException e) {
e.printStackTrace();
return null;
}
try{
httpsConn =(URLConnection) myURL.openConnection();
if(httpsConn != null) {
InputStreamReader insr = newInputStreamReader(
httpsConn.getInputStream(), "UTF-8");
BufferedReader br = newBufferedReader(insr);
String data= null;
if ((data =br.readLine()) != null) {
String[]retList = data.split(",");
if(retList.length > 2&& ("200".equals(retList[0]))){
addr =retList[2];
} else{
addr ="";
}
}
insr.close();
}
} catch(IOException e) {
e.printStackTrace();
returnnull;
}
returnaddr;
}
}
}
加上权限:
<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>