精华内容
下载资源
问答
  • 见连接:使用高德SDK开发安卓地图应用软件
    展开全文
  • 最近在做高德地图sdk的接入,这篇博客将会进行连载,讲述接入的开始到结束。  主要开发几个方面:基础定位、逆地理编码、绘制点标记、POI搜索、获取地址数据描述,其中会包括一些例子。  前奏讲的当然是接入最...


          最近在做高德地图sdk的接入,这篇博客将会进行连载,讲述接入的开始到结束。

         主要开发几个方面:基础定位、逆地理编码、绘制点标记、POI搜索、获取地址数据描述,其中会包括一些例子。

         前奏讲的当然是接入最基本的,搭环境了。注:这里我主要讲的是Androidstudio的环境搭建和开发,eclipse不做 了。


        1.进入高德官网http://lbs.amap.com/注册账号之后登录,进入控制台。

         2.添加应用

        3.创建完成之后就是添加新key,这里需要注意的有两点,第一,关于SHA1的获取;第二,Package,这个package就是你开发类所在的报名,
    在应用开发的地图的时候,所有类都要放在这个包里。
    关于SHA1的获取,按照高德的开发文档一般可以得到。如果你得不到,可以参照这篇博客http://blog.csdn.net/qq_29933359/article/details/53432077
    这一步之后可以获得开发所需要的KEY



          4.接下来就是下载jar包,然后在Android Studio里面生成库了。下载包的时候,地图有2D、3D选择,还有搜索、定位,据个人需求下载。
    不过,2D地图不包含导航功能的jar包。


          5.导入jar包到lib


            6.等待系统导入包,打开build.gradle中出现jar包名则导入成功,就可以进行开发了。

    以上是开发前需要做的工作,从下一篇开始进入开发----定位。



    展开全文
  • Android高德地图SDK开发

    千次阅读 2018-01-26 21:55:47
    Android高德地图SDK开发高德开发者平台官网:http://developer.amap.com/ 开发文档:http://developer.amap.com/api/android-sdk/summary/ 过程可以照着开发文档走 下面讲主要流程和一些注意的事项 1 ...

    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


    展开全文
  • PPT来自高德LBS开放平台资深研发经理朴春植在车库咖啡的“高德地图SDK开发实践沙龙”上的分享。沙龙中朴春植向开发者分享了LBS开发省电经验及如何给地图SDK添加自定义点等内容。
  • 高德SDK的包

    2017-04-12 15:39:14
    用于android高德开发的包
  • 高德地图 Android SDK 开发指南
  • 高德 开发 Android 定位SDK 开发指南 获取位置 获取定位数据
  • Android 使用高德SDK获取定位 在Android开发过程中,经常需要获取手机的定位,这里记录一下...文章目录Android 使用高德SDK获取定位说明开发过程Android Studio新建项目申请高德 Key新建应用添加KeyAndroid Studio ...

    Android 使用高德SDK获取定位

    在Android开发过程中,经常需要获取手机的定位,这里记录一下使用搞的定位的过程。我选择使用高德的SDK,其实也有Web的API,但是API使用IP定位,Android SDK可以使用多种定位方式。

    说明

    本文2020.4.12更新,此时文中所有内容均已实践

    高德开放平台
    功能需要,我使用的是Android 定位SDK,其他SDK类似。

    开发过程

    Android Studio新建项目

    新建一个项目,留意包名,后面要用到。
    如果是打开原有项目,注意调整build.gradle文件的applicationid与package一致

    申请高德 Key

    自己去注册账号,申请个人开发者也比较简单

    新建应用

    在这里插入图片描述
    类型选择Android SDK

    添加Key

    在这里插入图片描述
    输入发布版安全码 SHA1、调试版安全码 SHA1、以及 Package。

    Package与自己的AndroidManifest.xml 配置文件包名一致

    填写的SHA1值与本地的SHA1值 匹配(debug或者release至少有一个与本地的SHA1一致)

    本地的SHA1获取方法:
    向程序中添加以下代码段获取当前APK使用的签明文件SHA1。

    public static String sHA1(Context context){
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(
                context.getPackageName(), PackageManager.GET_SIGNATURES);
            byte[] cert = info.signatures[0].toByteArray();
            MessageDigest md = MessageDigest.getInstance("SHA1");
            byte[] publicKey = md.digest(cert);
            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < publicKey.length; i++) {
                String appendString = Integer.toHexString(0xFF & publicKey[i])
                    .toUpperCase(Locale.US);
                if (appendString.length() == 1)
                    hexString.append("0");
                    hexString.append(appendString);
                    hexString.append(":");
            }
            String result = hexString.toString();
            return result.substring(0, result.length()-1);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
    

    在Activity中调用一下

    String s = sHA1(WeatherActivity.this);//鉴权
    Log.e("sHA1:", s);
    

    就可以打印出来。
    填上即可。
    在这里插入图片描述

    Android Studio 配置工程

    Android 定位SDK 相关下载

    通过拷贝集成SDK

    1、拷贝 jar 文件至 libs 文件夹下
    将下载的定位 SDK jar 文件复制到工程的 libs 目录下,如果有老版本定位 jar 文件存在,请删除。定位 SDK 无需 so 库文件支持。
    2. Add
    切换到Project目录下,右键jar包,选择add as library。OK
    3. 配置 build.gradle 文件 一般默认就行
    在 build.gradle 文件的 dependencies 中配置
    compile fileTree(include: ['*.jar'], dir: 'libs')。

    获取天气定位

    配置AndroidManifest.xml
    首先,声明Service组件

    请在application标签中声明service组件,每个app拥有自己单独的定位service。

    <service android:name="com.amap.api.location.APSService"></service>
    
    然后,声明权限
    <!--用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!--用于访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <!--用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!--用于写入缓存数据到扩展存储卡-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
    
    最后,设置高德Key

    在application标签中加入:

    <meta-data android:name="com.amap.api.v2.apikey" android:value="key">//开发者申请的key       
    </meta-data>
    
    初始化定位

    在Activity中

    //声明AMapLocationClient类对象
        public AMapLocationClient mLocationClient = null;
        //声明定位回调监听器
        public AMapLocationListener mLocationListener = new MyAMapLocationListener();
        //声明AMapLocationClientOption对象
        public AMapLocationClientOption mLocationOption = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            init();
        }
    	private void init() {
            //初始化定位
            mLocationClient = new AMapLocationClient(getApplicationContext());
            //设置定位回调监听
            mLocationClient.setLocationListener(mLocationListener);
            //初始化AMapLocationClientOption对象
            mLocationOption = new AMapLocationClientOption();
            //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //获取一次定位结果:
            //该方法默认为false。
            mLocationOption.setOnceLocation(false);
    
            //获取最近3s内精度最高的一次定位结果:
            //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
            //mLocationOption.setOnceLocationLatest(true);
            //获取一次定位结果:
            //该方法默认为false。
            mLocationOption.setOnceLocation(true);
            
            //设置是否返回地址信息(默认返回地址信息)
            mLocationOption.setNeedAddress(true);
            //设置是否允许模拟位置,默认为false,不允许模拟位置
            mLocationOption.setMockEnable(false);
            //关闭缓存机制
            mLocationOption.setLocationCacheEnable(false);
            //给定位客户端对象设置定位参数
            mLocationClient.setLocationOption(mLocationOption);
            //启动定位
            mLocationClient.startLocation();
    
        }
    	private class MyAMapLocationListener implements AMapLocationListener {
    
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                if (aMapLocation != null) {
                    if (aMapLocation.getErrorCode() == 0) {
                    //此处获得成功,可以参照返回值表取需要的参数,我只要了省市县
                        Log.e("位置:", aMapLocation.getAddress());
                        Gprovince = aMapLocation.getProvince();
                        Gcity = aMapLocation.getCity();
                        Gdistrict = aMapLocation.getDistrict();
                        
                    } else {
                        //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                        Log.e("AmapError", "location Error, ErrCode:"
                                + aMapLocation.getErrorCode() + ", errInfo:"
                                + aMapLocation.getErrorInfo());
                    }
                }
            }
        }
    

    参数详细说明见官网
    错误码参考表

    最后一步,停止定位

    停止定位

    mLocationClient.stopLocation();//停止定位后,本地定位服务并不会被销毁
    

    销毁定位客户端
    销毁定位客户端之后,若要重新开启定位请重新New一个AMapLocationClient对象。

    mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务
    

    常见错误

    使用Android SDK 调用高德业务返回INVALID_USER_SCODE

    当返回INVALID_USER_SCODE(不是INVALID_USER_KEY哦),或错误码1008、32和7,可按照如下操作解决问题:

    检查SHA1值 //参照本文Key值获取部分
    检查包名
    Key值填写位置

    详细说明,参照官网

    祝各位开发顺利无Bug。

    展开全文
  • 本文使用Android Studio 4.1,给开发者提供了一个基于高德地图SDK进行地图样式设置的方法,在高德平台提供的自定义地图支持基础上,通过界面悬浮按钮+底部弹窗的方式,给用户更人性化的更换地图样式选择。...
  • 高德开发Android 定位SDK相关下载更新时间:2020年11月16日{"tab":["Android 定位SDK","Android 定位SDK旧版","AAR包下载"],"content": [{"download_notice":{"content": "使用Android 定位 SDK,需要申请API Key。...
  • iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位。当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省、市、...
  • 高德自定义地图- 轻松制作个性地图自定义地图是高德开发平台推出的一款可以帮助开发者自定义地图样式的工具 。你可以在平台中轻松定制区域面 、建筑物 、水系 、天空 、道路 、标注 、行政边界等七大类 ,共计 44 种...
  • 高德地图JavaScript API开发研究原文:高德地图JavaScript API开发研究高德地图JavaScript API是一套用JavaScript 语言编写的应用程序接口,可以通过各种API接口向地图添加内容,创建功能丰富、交互性强的地图应用。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 604
精华内容 241
关键字:

高德sdk开发