目前项目要做一个定位的项目,进入程序后获取位置,然后退出程序后在后台按照一定频率定位。
之前做过基站定位的项目,获取LAC等值取得基站位置,这次本来也打算这么做,结果google的获取位置的接口废弃了。
考虑到程序中需要地图显示,而google 之前用过的地图实在太恶心,偏移太大,故研究了下百度地图,准备使用百度地图的接口。
结果发现百度在Service中无法定位,locationClient.isstarted == false
考虑一直开启locationListener,但是一直出现send handler in a dead thread 警告,不堪其扰,而且怎样把消息传递到Service中没想到怎么解决,因为Service中handler的生存时间很短,并不一定能和locationListener重合,这块实在是因为我太菜了,不知道怎么办。
最后还是用回了Google的网络定位。。唉,壮哉我大Google
private void getGPSLoc() {
// TODO Auto-generated method stub
System.out.println("GPS 记录开始!");
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
if(location!=null)
{
gps_latitude = (float) location.getLatitude();
System.out.println("GPS定位 latitude:" + gps_latitude);
gps_longitude = (float) location.getLongitude();
System.out.println("GPS定位 longitude:" + gps_longitude);
}else{
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(settings.contains("lat")){
settings.edit().remove("lat").remove("lon");
}
if(location != null){
gps_latitude = (float) location.getLatitude();
System.out.println("基站、WIFI定位 latitude:" + gps_latitude);
gps_longitude = (float) location.getLongitude();
System.out.println("基站、WIFI定位 longitude:" + gps_longitude);
settings.edit().putFloat("lat", gps_latitude).putFloat("lon", gps_longitude);
}else{
System.out.println("暂时无法定位,采用历史数据");
gps_latitude = settings.getFloat("lat", 39.954232f);
gps_longitude = settings.getFloat("lon", 116.372305f);
}
}
中间用sharedPreference记录了下最近一次定位到的经纬度,频繁操作肯定会造成一些问题或者造成数据碎片之类的,但是具体影响未知。
最后求指教java.lang.RuntimeException: Handler (com.baidu.vi.i) {413d28c0} sending message to a Handler on a dead thread到底是怎样造成的
贴一篇底层的AGPS的百度文库链接供日后学习
http://wenku.baidu.com/view/8db86c8b680203d8ce2f2467