Android Fragment里嵌入高德地图定位

在上一篇已经写了嵌入高德地图,这里来说一下怎么实现定位,并显示定位的图标。

public class FragmentMap extends Fragment implements LocationSource, AMapLocationListener{

       private static FragmentMap fragment = null;

       @ViewInject(R.id.map)

       private MapView mapView;

       private AMap aMap;

       private View mapLayout;

       private OnLocationChangedListener mListener;

       private LocationManagerProxy mAMapLocationManager;

 

       public static Fragment newInstance() {

          if (fragment == null) {

             synchronized (FragmentMap.class) {

                 if (fragment == null) {

                      fragment = new FragmentMap();

 

                 }

           }

        }

       return fragment;

    }

 

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

          Bundle savedInstanceState) {

          if (mapLayout == null) {

          mapLayout = inflater.inflate(R.layout.fragment_map, null);

          ViewUtils.inject(this, mapLayout);

          mapView.onCreate(savedInstanceState);

 

         if (aMap == null) {

              aMap = mapView.getMap();

              aMap.setLocationSource(this);// 设置定位监听

              aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示

              aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false

              // 自定义系统定位蓝点

              MyLocationStyle myLocationStyle = new MyLocationStyle();

              // 自定义定位蓝点图标

              myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.content_btn_location));

             // 将自定义的 myLocationStyle 对象添加到地图上

             aMap.setMyLocationStyle(myLocationStyle);

             // 构造 LocationManagerProxy 对象

            mAMapLocationManager = LocationManagerProxy.getInstance(getActivity());

          }

          } else {

                  if (mapLayout.getParent() != null) {

                        ((ViewGroup) mapLayout.getParent()).removeView(mapLayout);

                  }

           }

      return mapLayout;

     }

   @Override

   public void onAttach(Activity activity) {

       super.onAttach(activity);

    }

 

   @Override

   public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }

 

  @Override

  public void onResume() {

      super.onResume();

      mapView.onResume();

   }

 

/**

* 方法必须重写

* map的生命周期方法

*/

  @Override

  public void onPause() {

       super.onPause();

       mapView.onPause();

       deactivate();

  }

 

/**

* 方法必须重写

* map的生命周期方法

*/

 @Override

 public void onSaveInstanceState(Bundle outState) {

      super.onSaveInstanceState(outState);

      mapView.onSaveInstanceState(outState);

 }

 

/**

* 方法必须重写

* map的生命周期方法

*/

 @Override

  public void onDestroy() {

     super.onDestroy();

     mapView.onDestroy();

  }

 

 @Override

 public void onLocationChanged(AMapLocation aMapLocation) {

      if (mListener != null && aMapLocation != null) {

          if (aMapLocation.getAMapException().getErrorCode() == 0) {

               mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点

 

              //获取位置信息

             geoLat = aMapLocation.getLatitude();

             geoLng = aMapLocation.getLongitude();

             aMap.moveCamera(CameraUpdateFactory.zoomTo(14));

 

          }

 

    }

 }

 

@Override

public void onLocationChanged(Location location) {

 

}

 

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

 

}

 

@Override

public void onProviderEnabled(String provider) {

 

}

 

@Override

public void onProviderDisabled(String provider) {

 

}

 

//激活定位

@Override

public void activate(OnLocationChangedListener listener) {

        mListener = listener;

        if (mAMapLocationManager == null) {

             mAMapLocationManager = LocationManagerProxy.getInstance(getActivity());

         //此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,

         //注意设置合适的定位时间的间隔,并且在合适时间调用removeUpdates()方法来取消定位请求

         //在定位结束后,在合适的生命周期调用destroy()方法

         //其中如果间隔时间为-1,则定位只定一次

          mAMapLocationManager.requestLocationData(LocationProviderProxy.AMapNetwork, 60 * 1000, 10, this);

        }

  }

 

//停止定位

@Override

public void deactivate() {

      mListener = null;

      if (mAMapLocationManager != null) {

           mAMapLocationManager.removeUpdates(this);

           mAMapLocationManager.destroy();

       }

     mAMapLocationManager = null;

    }

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索this
, null
, 时间
蓝点
高德地图fragment定位、android 嵌入fragment、android 嵌入高德地图、android 高德地图定位、android 高德定位,以便于您获取更多的相关知识。

时间: 2024-07-31 01:13:31

Android Fragment里嵌入高德地图定位的相关文章

Android开发之 Fragment里嵌入高德地图

最近在做的项目里要用到地图,看了一下高德地图的API,最后决定就用高德地图,和平时不同,这次地图是要嵌在Fragment了,研究了一下网上的代码,最后实现了.下面说一下实现2D地图的方法. 1.先去高德地图官网注册Key,地址是http://lbs.amap.com/api/android-sdk/summary/: 2.根据说明下载所需的sdk.   开发之 Fragment里嵌入高德地图-android 嵌入fragment">   3.配置工程 (1)添加key 在工程的"

高德地图定位失败 1 缺少重要参数

问题描述 高德地图定位失败 1 缺少重要参数 重要参数为空是怎么回事? public void activate(OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { mlocationClient = new AMapLocationClient(this.getApplicationContext()); mLocationOption = new AMapLoca

方法-iOS自带高德地图定位是不是有两种方式

问题描述 iOS自带高德地图定位是不是有两种方式 1.iOS自带高德地图定位是不是有两种方式? a.CLLocationManager b.MKMapView的代理方法:两者的主要区别是,当有地图显示的时候,就不需要使用定位的方式获取经纬度:当没有地图显示的时候,就需要定位的方式获取经纬度:2.iOS使用百度地图定位只有一种? a.BMKMapView没有实现地图定位的方法? b.只能通过BMKLocationService来实现定位?3.两种地图定位的坐标是不是原始的经纬度(原始指的意思是:假

android Fragment中嵌入ListView ,更新数据后,getview()没被调用

问题描述 android Fragment中嵌入ListView ,更新数据后,getview()没被调用 我是在vieapage里面嵌套listview的.viewpager是用fragment写的.listview是简单Adapter写的 解决方案 你刷新时怎么写的,如果制定了adapter,调用adapter的notifyDataSetChanged就可以了,除非你的数据源中没有数据 解决方案二: 先看listview是否绑定了adapter,然后看是否调用了notifyDataSetCh

jar-安卓实现高德地图定位 计算两者之间的距离如何实现

问题描述 安卓实现高德地图定位 计算两者之间的距离如何实现 安卓实现高德地图定位 计算两者之间的距离如何实现 计算距离的这个类是那个jar包下面的类啊 解决方案 如何实现安卓定位,用arcGis开发 解决方案二: //1.将两个经纬度点转成投影点 MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(39.989612,116.480972)); MAMapPoint point2 = MAMapPointF

高德地图定位 onLocationChanged 没有触发

问题描述 高德地图定位 onLocationChanged 没有触发 private void initLocation() { // 初始化定位, mlocationClient = new AMapLocationClient(getApplicationContext()); // 初始化定位参数 mLocationOption = new AMapLocationClientOption(); // 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sen

Android之高德地图定位SDK集成及地图功能实现

一:百度高德官方网站,然后去创建应用 网址:http://lbs.amap.com/ 1.找到控制台创建一个应用 2.添加key名称,注意命名规范,还有就是下面的SHA1和包名 3.点击右边的Gradle再选择signingReport下面会有个命令,稍等几分钟得到SHA1 4.添加包名 5.得到key 二:下载定位SDK,下载下来有地图SDK和定位SDK,然后导入项目,导入再Add As Library,so文件按自己需求来 下载地址:http://lbs.amap.com/api/andro

美食频道全新上线 Android版高德地图全面评测

前言:作为移动互联网最重要的应用之一,手机地图正在用户出行以及LBS发展中扮演着越来越重要的角色,而随着用户对地理位置服务需求的不断增长,很多手机地图产品的定位也从最早的单一工具发生了一些转变,就比高德公司推出的高德地图.现在被我们所熟知的高德地图,是高德迷你地图的进化和全新升级版本,它将免费在线导航.LBS交友系统.多种垂直生活服务频道. 位置广告系统等充分整合,打造出了全新的移动生活位置服务门户,为国内移动用户提供了一站式的生活消费指南及位置交友服务.经过一系列的更新和发展, Android

ios-IOS高德地图,地图上小蓝点怎么移除?

问题描述 IOS高德地图,地图上小蓝点怎么移除? IOS高德定位中 ,地图上一直有个小蓝点 ,怎么移除掉 求大神帮助 解决方案 这个需要有高德地图的SDK有提供接口给你. 解决方案二: iOS移除地图标注大头针 解决方案三: 那个小蓝点是高德地图定位到的用户的当前位置,如果你不设置定位用户当前位置就不会再显示