先上局部代码
/**
* android 定位
*/
void initGoogleLocation() {
if (locationListener == null) {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager == null) {
return;
}
Location lastlocation = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (lastlocation != null) {
BMapApiApplication.userVo.setLatitude((int) (lastlocation
.getLatitude() * 1e6));
BMapApiApplication.userVo.setLongitude((int) (lastlocation
.getLongitude() * 1e6));
}
locationListener = new android.location.LocationListener() {
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
Log.i(BMapApiApplication.SOFTNAME, "location");
if (location != null) {
/**
* 定位解析以及处理
*/
iBinder.sendPacket(new LocationPacket(location, iBinder));
}
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, location_time,
20, locationListener);
Log.i(BMapApiApplication.SOFTNAME, provider);
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, location_time, 20,
locationListener);
Log.i(BMapApiApplication.SOFTNAME, provider);
}
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
};
/**
* 请求定位
*/
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, location_time, 20,
locationListener);
} else {
if (locationManager != null) {
locationManager.removeUpdates(locationListener);
locationListener = null;
}
}
}
此代码为目前使用正常,不过有时候 怎么都不能触发,后来发现重启手机即可,具体原因不详。
注意事项:我一请求就是GPS,而不是网络,经调试发现,如果开始请求为网络,如果软件中途开启GPS,则不能监听到GPS的开启,所以需要先GPS监听无GPS后启用网络,而如果再开启GPS的话还是能监听到的再转换GPS监听位置。网络定位经常不是受参数影响,说是 最小时间最小距离,就是说 有可能大于这个距离与时间,,网络定位无论怎么请求都不会有,它自动在大于这个参数时间距离 后随机触发,GPS的话就是根据参数来的