上次在学习意外系列中的第五季提到了有关GPS定位中发现的一个Geocoder处理由GPS定位的信息查询地址信息的内容结果返回地址的信息列表为空,导致了开发的应用程序异常终止,实在无语。当然我后面给的那个类还是可以解决问题的。
而就在今天一次偶然的机会我发现了这个问题的解决方案——修改运行配置,将模拟器由android的版本改为google api的版本,问题就解决了。这个并不是google出现的bug,只是在这个地图信息获取的机制也许只有在google的 api 模拟器中才可以操作成功。
所以一个建议就是在每次设计到地图的信息时,还是采用google的avd比较好,这样子避免出现那些比较闹心的事情,以免让人揪心的“为伊消得人憔悴”
最后还是给出这个转换的代码,帮大家方便使用:
// 获取LocationManager的一个实例
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
10000, 0, locationListener);
Location location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
locationManager.setTestProviderEnabled("gps", true);
while (location != null) {
latitude = location.getLatitude();// 经度
longitude = location.getLongitude();// 纬度
refreshMapView();
Geocoder geo = new Geocoder(this, Locale.getDefault());
List<Address> adList = null;
try {
// 将gps信息类转化成address信息类
adList = geo.getFromLocation(latitude, longitude, 1);
} catch (IOException e) {
e.printStackTrace();
}
if (adList.size() > 0) {
// showDialog(String.valueOf(adList.size()));
Address ad = adList.get(0);
// nowlocal= ad.getAdminArea();//取得省级名
// nowlocal=ad.getLocality();//取得区域名
if (ad.getLocality() == null) {
if (ad.getAdminArea() == null) {
if (ad.getCountryName() == null) {
nowlocal = "公海";
} else
nowlocal = ad.getCountryName();
} else {
nowlocal = ad.getAdminArea();
}
} else
nowlocal = ad.getLocality();
showDialog(ad.toString());
} else {
nowlocal = "查无此地~";
}
break;
}
其中的那个local 和nowlocal是String类型的 我是用它们来取得当前位置的一个级别的地址信息。
其中的那个local 和nowlocal是String类型的 我是用它们来取得当前位置的一个级别的地址信息。