Android高德地图SDK开发

Android高德地图SDK开发:


高德开发者平台官网:http://developer.amap.com/
开发文档:http://developer.amap.com/api/android-sdk/summary/


过程可以照着开发文档走
下面讲主要流程和一些注意的事项


1 创建账号,去个人中心中创建应用

添加新Key
若仅为调试使用(不发布),则这里的发布版SHA1 和 调试版SHA1 的值可以同一个值,同为调试的SHA1,发布的时候再把 发布版的sha1更改
调试版SHA1获取方式参考:http://lbs.amap.com/faq/top/hot-questions/249

发行版的SHA1获取方式:

第一步、打开Android Studio的Terminal工具

第二步、输入命令:keytool -v -list -keystore keystore文件路径

第三步、输入Keystore密码

PackageName就不赘述了

一个Key只能对应一个应用 (一个高德地图里创建的应用也是一个你的项目的应用(一个包))


2 通过手动的方式添加lib
在官网下载:http://lbs.amap.com/api/android-sdk/download/
将相关jar包导入自己的项目中: (这里使用的是3D的地图 和定位 搜索功能)
这里写图片描述

Gradle方式参考:http://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project


3 创建jniLibs目录(在项目的包级下)
添加so库
注:3D地图才需要添加so库,2D地图无需这一步骤

这里写图片描述

Gradle方式参考:http://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project


4 application标签中
加你的key

  <!-- 地图的key -->
        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="你的key">
        </meta-data> 

5 添加权限
要检查是否与原项目的权限配置重复 重复则删去
权限参考:http://developer.amap.com/api/android-sdk/guide/create-map/show-map


开始使用

6 xml中

<com.amap.api.maps.MapView

android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

7 java中
声明

    MapView mMapView;
    AMap aMap;
    public UiSettings mUiSettings;
    MyLocationStyle myLocationStyle;
    //声明AMapLocationClient类对象
    AMapLocationClient mLocationClient = null;
    //声明当前经纬度
    private double currentLat,currentLon;
    // 当前位置
    LatLng currentLatLng;
    // 设置一个flag 当 第一次进入地图 去将当前位置作为屏幕中心点
    private boolean flag=true;

oncreate()中:

        mMapView = findViewById(R.id.map);      // 与xml中的对应
        mMapView.onCreate(savedInstanceState);// 此方法必须重写
        checkGps();
        initMap();

/**
     * 初始化
     */
    private void initMap() {
        if (aMap == null) {
            aMap = mMapView.getMap();
            mUiSettings = aMap.getUiSettings();
            aMap.getUiSettings().setLogoBottomMargin(-23);  //将LOGO 和 比例尺 往下移
        }
        setUpMap();
        customMyLocationStyle();
        setMyLocation();
    }
        /**
         * 设置一些amap的属性
         */
    private void setUpMap() {
        //显示比例尺
        mUiSettings.setScaleControlsEnabled(true);
        //显示指南针
        mUiSettings.setCompassEnabled(true);
        // 显示定位按钮
        aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示 默认不显示
    }

    /**
     *  设置自定义的定位风格样式   更多的风格参考官网
     */
    private void customMyLocationStyle(){
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类 默认为 连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        customLocationIcon();
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
    }

    /**
     *  设置自定义定位图标和外圆样式
     */
    private void customLocationIcon(){
        //设置图标
        BitmapDescriptor bitmaplocation = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(MapActivity.this.getResources(),
                R.mipmap.location_3));
        myLocationStyle.myLocationIcon(bitmaplocation);//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数
        myLocationStyle.strokeColor(Color.GRAY);      //设置定位蓝点精度圆圈的边框颜色的方法。 int 类型的
        // myLocationStyle.radiusFillColor(Color.BLUE);//设置定位蓝点精度圆圈的填充颜色的方法 默认为紫色
    }

    /**
     *  初始化定位并获取回调
     */
    private void setMyLocation(){
        //初始化定位
        mLocationClient = new AMapLocationClient(MapActivity.this);
        //设置定位回调监听
        mLocationClient.setLocationListener(mLocationListener);
        //启动定位
        mLocationClient.startLocation();
    }

/**
 * 定位回调监听器
 */
public AMapLocationListener mLocationListener = new AMapLocationListener() {
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        // 从这里开始就会持续回调
        if (checkGps()) {
            if (amapLocation != null) {
                if (amapLocation.getErrorCode() == 0) {
                    //定位成功回调信息,设置相关消息
                    amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                    currentLat = amapLocation.getLatitude();//获取纬度
                    currentLon = amapLocation.getLongitude();//获取经度
                    currentLatLng = new LatLng(currentLat, currentLon);
                    amapLocation.getAccuracy();//获取精度信息
                    Log.i("mylocation", "currentLat : " + currentLat + " currentLon : " + currentLon);
                    if (flag) {
                        // 将当前位置移至屏幕中心 设置了flag并且设置了上面的定位模式 这里就只一次
                        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, 17));
                        flag = false;
                    }
                } else {
                    //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                    Log.e("AmapError", "location Error, ErrCode:"
                            + amapLocation.getErrorCode() + ", errInfo:"
                            + amapLocation.getErrorInfo());
                }
            }
        }
    }
};

停止,结束等生命周期与Activity关联:

   @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
        mLocationClient.onDestroy();//销毁定位客户端。
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        // TODO Auto-generated method stub
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mMapView.onPause();
        //mLocationClient.stopLocation();//停止定位
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
    }

检查GPS是否开启

private boolean checkGps(){
        if (!IsGpsWork.isGpsEnabled(this)){
            Toast toast = Toast.makeText(this, getString(R.string.hasNotOpenGps), Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
            return false;
        }else {
            return true;
        }
    }

IsGpsWork 类:

public class IsGpsWork {
    //判断GPS是否开启
    public static boolean isGpsEnabled(Context context) {
        LocationManager locationManager = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        // 判断GPS模块是否开启
        return locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    }
}

逆地址编码(经纬度->详细文字描述(省市区街道等))
参考:http://blog.csdn.net/weixin_37577039/article/details/79177992


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高德地图提供了一个强大的离线地图开发模块,开发者可以利用它来实现离线地图功能的集成和定制。首先,开发者需要在高德地图官网申请相应的API Key,并在应用程序中配置和使用该Key。在集成离线地图功能之前,开发者需要下载离线地图数据并将其存储在设备的本地存储中,以便在没有网络连接的情况下进行地图展示和定位。开发者可以利用高德地图提供的离线地图下载管理器模块进行地图数据的下载和管理。 通过高德地图的离线地图模块,开发者可以实现地图数据的预览、搜索、定位和导航等功能,同时也可以定制地图的样式和功能,以满足不同应用场景的需求。另外,高德地图还提供了一系列离线地图SDK和API接口,方便开发者快速集成和定制离线地图功能。通过高德地图的离线地图开发模块,开发者可以实现更加灵活、稳定和高效的离线地图功能,为用户提供更好的地图体验。 在进行android高德离线地图开发时,开发者需要注意用地图API Key、合理存储地图数据和适配不同设备分辨率等问题,确保离线地图功能的稳定性和流畅性。同时,开发者还可以通过高德地图提供的开发者社区和技术支持渠道,获取更多关于离线地图开发的技术文档和经验分享,帮助解决开发过程中遇到的问题。总之,android高德离线地图开发提供了丰富的功能和灵活的定制选项,能够帮助开发者快速实现离线地图功能,提升应用程序的用户体验和价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值