高德地图接入笔记

一、引入和配置

1.引入相关的sdk

    //高德地图sdk相关
    implementation 'com.amap.api:navi-3dmap:latest.integration'//导航
    implementation 'com.amap.api:search:latest.integration'//搜索
    implementation 'com.amap.api:location:latest.integration'//定位`

注意导航和3d地图implementation 'com.amap.api:3dmap:latest.integration'不能同时导入,否则报错
注意导航和2d地图implementation 'com.amap.api:map2d:latest.integration'不能同时导入,否则报错

2.创建应用,添加key
https://lbs.amap.com/dev/key/app

<application
         android:icon="@drawable/icon"
         android:label="@string/app_name" >
         <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="请输入您的用户Key"/>
            ……
</application>

3.在AndroidManifest.xml配置权限

<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />  
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />     
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

4.混淆

3D 地图 V5.0.0之前:
-keep   class com.amap.api.maps.**{*;} 
-keep   class com.autonavi.amap.mapcore.*{*;} 
-keep   class com.amap.api.trace.**{*;}

3D 地图 V5.0.0之后:
-keep   class com.amap.api.maps.**{*;} 
-keep   class com.autonavi.**{*;} 
-keep   class com.amap.api.trace.**{*;}

定位
-keep class com.amap.api.location.**{*;}
-keep class com.amap.api.fence.**{*;}
-keep class com.autonavi.aps.amapapi.model.**{*;}

搜索
-keep   class com.amap.api.services.**{*;}

2D地图
-keep class com.amap.api.maps2d.**{*;}
-keep class com.amap.api.mapcore2d.**{*;}

导航
-keep class com.amap.api.navi.**{*;}
-keep class com.autonavi.**{*;}

二、地图显示和定位

1.定位

    //初始化定位
    AMapLocationClient mLocationClient;
    private void locationInit() {
        //初始化定位
        mLocationClient = new AMapLocationClient(this.getActivity().getApplicationContext());
        //设置定位回调监听
        mLocationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                L.e(TAG,aMapLocation.toString());
                mBinding.tvLocation.setText(aMapLocation.getAoiName());
            }
        });
        //初始化AMapLocationClientOption对象
        AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
        //设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)
        mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
        mLocationOption.setOnceLocation(true);//获取一次定位结果
        //给定位客户端对象设置定位参数
        mLocationClient.setLocationOption(mLocationOption);
        //启动定位
        mLocationClient.startLocation();
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mLocationClient!=null){
            mLocationClient.stopLocation();
            mLocationClient.onDestroy();
        }

    }

    private void getLocationPermission(){
        AndPermission.with(this)
                .runtime()
                .permission(Permission.ACCESS_COARSE_LOCATION,Permission.ACCESS_FINE_LOCATION)
                .onGranted(permissions -> {
                    //异步查询
                   locationInit();
                })
                .onDenied(permissions -> {
                    new XPopup.Builder(this.getActivity())
                            .asConfirm("权限申请","读取视频文件,需要获取【存储】的权限,去设置开启?",
                                    "取消","去设置",
                                    () -> AppUtils.goIntentSetting(this.getActivity()),null,true).show();
                })
                .start();
    }

2.显示地图,并定位到自己位置


image.png

2.1.布局中创建

        <com.amap.api.maps.MapView
            android:id="@+id/map_view"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/include6" />

2.2.获取地图,并设置定位到自己当前位置

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_NAVIGATION_BAR).statusBarDarkFont(true).init();
        db.mapView.onCreate(savedInstanceState);
        initMap();
        initView();
    }

    private void initMap() {
        AMap aMap = db.mapView.getMap();
        aMap.setMyLocationEnabled(true);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        db.mapView.onDestroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        db.mapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        db.mapView.onPause();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        db.mapView.onSaveInstanceState(outState);
    }

    private void initView() {
        tvTitle.setText("选择地址");

    }

更多定位蓝点展示模式参考:https://lbs.amap.com/api/android-sdk/guide/create-map/mylocation

三、poi检索的时候需要选择省份,然后通过关键字检索

    private String[] provinceList =new String[]{"北京市", "天津市",  "重庆市","上海市","河北省", "山西省",  "辽宁省", "吉林省",
"黑龙江省",  "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省","河南省", "湖北省", "湖南省", "广东省",  "海南省","四川省", 
"贵州省", "云南省",  "陕西省", "甘肃省", "青海省","台湾省","西藏自治区", "内蒙古自治区","广西壮族自治区","宁夏回族自治区", 
"新疆维吾尔自治区",  "香港特别行>政区", "澳门特别行政区"};

把上面的34省份选择一个后作为cityCode,再传入对应的关键字,就可以检索出来poi列表信息

    int currentPage=1;
    PoiSearch.Query query;
    PoiSearch poiSearch;
    private void getPoi(String keyWord){
        //keyWord表示搜索字符串,第二个参数表示POI搜索类型,cityCode表示POI搜索区域
        query = new PoiSearch.Query(keyWord, "", cityCode);
        query.setPageSize(20);
        query.setPageNum(currentPage);//设置查询页码

        poiSearch = new PoiSearch(this, query);
        poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
            @Override
            public void onPoiSearched(PoiResult poiResult, int i) {
                ArrayList<PoiItem> pois = poiResult.getPois();
                if (pois!=null&&pois.size()>0){
                    if (currentPage==1){
                        //地图移动到第一个检索POI位置
                        mAdapter.setNewData(pois);
                    }else mAdapter.addData(pois);

                    mAdapter.loadMoreComplete();
                }else mAdapter.loadMoreEnd();
            }

            @Override
            public void onPoiItemSearched(PoiItem poiItem, int i) {

            }
        });
        poiSearch.searchPOIAsyn();
    }
image.png

四、异常相关

异常一:More than one file was found with OS independent path 'assets/location_map_gps_locked.png'

发现

image.png
里面有重复的资源图片,其实直接去掉2d地图的sdk就行了,但也可以用下面的方法解决。
解决方案:在Module:app中的android中写入

packagingOptions {
        exclude 'assets/location_map_gps_locked.png'
        exclude 'assets/location_map_gps_3d.png'
    }

异常二:javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found`

导致无法定位和检索poi
网络设置了代理,导致
https://blog.csdn.net/flyfight88/article/details/84099014

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 1.获取Key 申请 Key: 一、创建新应用 进入控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这...
    陽光亽活力阅读 1,487评论 0 0
  • 最近项目需求在fragment中的scrollview中加载高德地图控件和定位。,中间遇到一点坑,把过程记录下来。...
    Vonelone阅读 3,389评论 0 4
  • 1.申请key值 https://lbs.amap.com/api/android-sdk/guide/creat...
    故江阅读 1,202评论 0 0
  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007阅读 2,106评论 0 3
  • 评论: 相爱容易相守难。有多少人,因为爱情走进了婚姻,却因为彼此成长的速度不同而相行渐远……婚姻中的两个人就像一起...
    yang_3457阅读 181评论 0 0