binbinyang---百度地图androidAPI Android SDK v3.5.0------------2.定位功能

来源:互联网 发布:淘宝提醒我手机有木马 编辑:程序博客网 时间:2024/06/13 03:04


按照百度地图官网提供的API,前面完成了所谓的hello map的完成,现在要说的是接下来的一个功能,定位功能


初始化定位相关代码

/**      * 初始化定位相关代码      */private void initLocation() {mLocationClient = new LocationClient(this);mLocationListener = new MyLocationListener();mLocationClient.registerLocationListener(mLocationListener);if (mLocationClient != null && !mLocationClient.isStarted()) {mLocationClient.requestLocation();mLocationClient.start();}LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);// 设置定位模式option.setOpenGps(true);option.setCoorType("bd09ll");// 设置坐标类型,返回的定位结果是百度经纬度,默认值gcj02option.setIsNeedAddress(true);// 返回的定位结果包含地址信息option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向option.setScanSpan(1000);// 每过1000毫秒进行一次请求。mLocationClient.setLocOption(option);}

2.定位的监听器

/**      * 实现实位回调监听      */ private class MyLocationListener implements BDLocationListener {/** * 定位成功以后的回调 */@Overridepublic void onReceiveLocation(BDLocation location) {MyLocationData data = new MyLocationData.Builder()//.accuracy(location.getRadius())//.latitude(location.getLatitude())//.longitude(location.getLongitude())//.build();// 设置定位数据  mBaiduMap.setMyLocationData(data);mLatitude = location.getLatitude();mLongtitude = location.getLongitude(); // 第一次定位时,将地图位置移动到当前位置  if (isFirstIn) {LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(msu);isFirstIn = false;//吐司Toast.makeText(MainActivity.this, location.getAddrStr(), 10).show();}}

其次定位这个功能,是非常消耗电量的,为了用户体验考虑。在onStart中开启定位,在onStop中关闭定位~~这样应用最小化时就不会一直在哪GPS请求定位了,、

@Overrideprotected void onResume() {super.onResume();// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onStart() {super.onStart();/** * 开启定位 */mBaiduMap.setMyLocationEnabled(true);if (mLocationClient.isStarted())mLocationClient.start();}@Overrideprotected void onPause() {super.onPause();// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause();}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();/** * 停止定位 */mBaiduMap.setMyLocationEnabled(false);mLocationClient.stop();}@Overrideprotected void onDestroy() {super.onDestroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}

必须在AndroidManifest.xml配一个service

  <service            android:name="com.baidu.location.f"            android:enabled="true"            android:process=":remote" >        </service>

定位的核心代码

/** * 定位到我的位置 *  地图移动到我的位置,此处可以重新发定位请求,然后定位;       * 直接拿最近一次经纬度,如果长时间没有定位成功,可能会显示效果不好  *  */private void centerToMyLocation() {LatLng latLng = new LatLng(mLatitude, mLongtitude);MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(msu);}




0 0
原创粉丝点击