zoukankan      html  css  js  c++  java
  • Android开发实现高德地图定位

    1.获取Key

        参考官方文档:http://lbs.amap.com/api/android-location-sdk/guide/create-project/get-key

        对于签名文件的获取建议参考:http://blog.csdn.net/caben_/article/details/52708169,通过签名文件可以使我们在其他电脑上key不会报错。

     配置key的时候注意name不变:

    <meta-data
    android:name="com.amap.api.v2.apikey"
    android:value="b1b7d5f1feb8be38b284c9e2aabab87b">
    </meta-data>

    2.获取定位

       参考官方文档:http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation/

     对于Android6.0权限我们可以在build中声明 targetSdkVersion 22 小于23即可。这样做会默认打开6.0以上需要重新申请的权限,我们也可以在代码中动态处理6.0以上权限申请,相对麻烦一些。

      

    public class MainActivity extends AppCompatActivity implements AMapLocationListener, LocationSource {

    private MapView mMapView = null;
    private AMap aMap;

    //标识,用于判断是否只显示一次定位信息和用户重新定位
    private boolean isFirstLoc = true;
    //声明mListener对象,定位监听器
    private OnLocationChangedListener mListener = null;
    //声明AMapLocationClient类对象
    public AMapLocationClient mLocationClient = null;
    //声明AMapLocationClientOption对象
    public AMapLocationClientOption mLocationOption = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //获取地图控件引用
    mMapView = (MapView) findViewById(R.id.map);
    //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
    mMapView.onCreate(savedInstanceState);
    if (aMap == null) {
    aMap = mMapView.getMap();
    //设置显示定位按钮 并且可以点击
    UiSettings settings = aMap.getUiSettings();
    aMap.setLocationSource(this);//设置了定位的监听
    // 是否显示定位按钮
    settings.setMyLocationButtonEnabled(true);
    aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase
    }
    // 设置定位监听
    aMap.setLocationSource(this);
    // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
    aMap.setMyLocationEnabled(true);
    // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种
    aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
    initLocation();
    }

    private void initLocation() {
    //初始化定位
    mLocationClient = new AMapLocationClient(getApplicationContext());
    //设置定位回调监听
    mLocationClient.setLocationListener(this);
    //初始化AMapLocationClientOption对象
    mLocationOption = new AMapLocationClientOption();
    //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
    mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
    //获取一次定位结果:
    //该方法默认为false。
    mLocationOption.setOnceLocation(true);
    //获取最近3s内精度最高的一次定位结果:
    //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
    mLocationOption.setOnceLocationLatest(true);
    //给定位客户端对象设置定位参数
    mLocationClient.setLocationOption(mLocationOption);
    //启动定位
    mLocationClient.startLocation();

    }

    @Override
    protected void onDestroy() {
    super.onDestroy();
    mLocationClient.stopLocation();//停止定位后,本地定位服务并不会被销毁
    mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务
    //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
    mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
    super.onResume();
    //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
    mMapView.onResume();
    }

    @Override
    protected void onPause() {
    super.onPause();
    //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
    mMapView.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
    mMapView.onSaveInstanceState(outState);
    }

    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
    if (amapLocation != null) {
    if (amapLocation.getErrorCode() == 0) {
    //可在其中解析amapLocation获取相应内容。更多内容可以打断点查看,也可参考官方文档
    Log.i("Talon", amapLocation.getAddress());
    // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
    if (isFirstLoc) {
    //设置缩放级别
    aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
    //将地图移动到定位点
    aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));
    //点击定位按钮 能够将地图的中心移动到定位点
    mListener.onLocationChanged(amapLocation);
    //添加图钉
    // aMap.addMarker(getMarkerOptions(amapLocation));
    isFirstLoc = false;
    } else {
    //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
    Log.e("AmapError", "location Error, ErrCode:"
    + amapLocation.getErrorCode() + ", errInfo:"
    + amapLocation.getErrorInfo());
    }
    }
    }
    }

    //激活定位
    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
    mListener = onLocationChangedListener;
    }

    //停止定位
    @Override
    public void deactivate() {
    mListener = null;
    }
    }


    小白个人GitHub地址:https://github.com/IT-Talon/GaodeMapDemo
  • 相关阅读:
    《Orange'S:一个操作系统的实现》与上一版之比较
    IPC
    末日帝国——Agile公司的困境 (2)
    取经学道真经验——你听过这么享受的培训吗
    数据库设计指南(五)数据库小技巧
    软件项目开发典型风险一览
    数据库设计指南(四)保证数据的完整性
    官网的Ext direct包中.NET版的问题
    软件项目开发应写的13类文档
    面试EJB常考题
  • 原文地址:https://www.cnblogs.com/Talon-lly/p/6476994.html
Copyright © 2011-2022 走看看