奇异情况!百度地图在Fragment中仅仅定位一次就不定位了,求过路指点

Android 码拜 8年前 (2016-09-15) 2271次浏览
[color=#00FF00]     本人直接在activity中进行百度地图定位的时候,设置好定位LocationClientOption参数后,绑定定位结果监听器,
启动定位后,在监听器中就能不断地侦听到定位结果的回调,但在fragment中却发现了一个和奇异的问题,定位
是定位了,但是只是定位了一次,就好像退出了 。下面是本人的代码,请过路高手不吝指点!
[/color]
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;
public class Fragment_Nearby extends Fragment
{
private Context mContex = null;
// 百度地图相关
private MapView mMapView = null;
private BaiduMap mBaiduMap = null;
private MapStatusUpdate msu = null;
// 定位相关
private boolean isFirstGetLocation=true;
private LocationClient mLocationClient = null;
MyLocationListener mLocationListener;
public Fragment_Nearby(Context context)
{
mContex = context;// 获取上下文对象
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
/**
* 初始化地图控件
*/

private void InitiMapView(View view)
{
mMapView = (MapView) view.findViewById(R.id.id_mBmapView);
mBaiduMap = mMapView.getMap();// 从地图视图中获取百度地图实例对象
// 设置地图初始化缩放比例
msu = MapStatusUpdateFactory.zoomTo(15.0f);// 这里的显示等级第15级
mBaiduMap.setMapStatus(msu);
}
/**
* 初始化定位相关
*/

private void InitiMapLocation()
{
mLocationClient=new LocationClient(mContex); //定位客户端
mLocationListener=new MyLocationListener();  //定位监听器
//绑定定位监听器
mLocationClient.registerLocationListener(mLocationListener);
//对定位参数进行配置 LocationClientOption
LocationClientOption option=new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);
option.setCoorType(“bd09ll”);
option.setScanSpan(1000);
option.setIsNeedAddress(true);
option.setOpenGps(true);
//设置定位参数
mLocationClient.setLocOption(option);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.tab_nearby, container, false);
InitiMapView(view); //初始化地图相关内容
InitiMapLocation(); //初始化地图定位相关内容
mBaiduMap.setMyLocationEnabled(true);//开启定位图层
return view;
}
@Override
public void onStart()
{
super.onStart();
if (mLocationClient.isStarted()==false)
{
mLocationClient.start();//开启定位
}
}
@Override
public void onResume()
{
super.onResume();
if (mMapView != null)
{
mMapView.onResume(); // 使百度地图地图控件和Fragment的生命周期保持一致
}
}
@Override
public void onPause()
{
super.onPause();
if (mMapView != null)
{
mMapView.onPause(); // 使百度地图地图控件和Fragment的生命周期保持一致
}
}
@Override
public void onStop()
{
super.onStop();
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();//停止定位
}
@Override
public void onDestroy()
{
super.onDestroy();
if (mMapView != null)
{
mMapView.onDestroy(); // 使百度地图地图控件和Fragment的生命周期保持一致
}
}
/**
* 这是一个定位结果的侦听类,实现了BDLocationListener接口
* 用于构造定位结果监听器
* 接口中有一个重要的方法:onReceiveLocation()
*  用于在定位成功后进行回调
*/

public class MyLocationListener implements BDLocationListener
{
@Override
public void onReceiveLocation(BDLocation location)
{
//但是在logcat中只能看到一次结果。
System.out.println(“接收到了定位结果,用于数据监控调试作用”);
//判断能否为首次获取到位置数据
if (isFirstGetLocation)
{
//假如为首次定位,则直接定位到当前用户坐标
LatLng latLng=new LatLng(location.getLatitude(), location.getLongitude());
MapStatusUpdate msuLocationMapStatusUpdate=MapStatusUpdateFactory//
.newLatLng(latLng);
mBaiduMap.animateMapStatus(msuLocationMapStatusUpdate);
isFirstGetLocation=false;
}
}
}
}
困惑已久,本人在activity中直接使用没有问题,本人觉得是Fragment哪里没用好,请各位高手指点!奇异情况!百度地图在Fragment中仅仅定位一次就不定位了,求过路指点
解决方案

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明奇异情况!百度地图在Fragment中仅仅定位一次就不定位了,求过路指点
喜欢 (0)
[1034331897@qq.com]
分享 (0)