继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

安卓开发之高德地图的使用及附近地点POISearch列表展示

ABOUTYOU
关注TA
已关注
手记 487
粉丝 68
获赞 360

获取APP KEY

打开高德开放平台, 登录后点击进入控制台,创建一个新应用,创建以后,添加新KEY,如下图

image.png


填写Key名称,发布版安全码SHA1和调试版SHA1。

项目签名

要获取发布版SHA1,先要对APK进行签名,点击工具栏中的Build,


image.png


点击 Generate Signed APK,如图

image.png

如果之前有存在的key,你可以选择已存在的,这里我选择新建一个,点击Create new,可以选择将key存在当前项目的目录下,命名为amapdemo ,如图


image.png

填写密码,key的别名,组织名,城市名等等。


image.png

获取调试版本SHA1(注意JDK环境变量配置

方式一:

Windows下用控制台打开你所在的JDK路径下的bin目录,输入keytool.exe -list -keystore x:\xx\xx\debug.keystore,x:\xx\xx一般为用户目录下的.android文件夹,可以看下图


image.png

方式二:

直接打开控制台输入cd .android,再输入keytool -list -v -keystore debug.keystore,回车,提示输入口令,口令默认为android

image.png

获取发布版本SHA1

打开Android Studio的Terminal工具,、输入命令:keytool -v -list -keystore (keystore文件路径),我这里刚才直接默认为项目下的路径,所以直接输入 amapdemo.jks,回车,同样提示输入Keystore密码,密码是刚才签名所输入的密码,不要告诉我你已经忘了。。。

image.png

如果出现keytool不是内部命令,那么说明你的环境变量没配置好,检查环境变量,JDK和Android环境变量配置

获取PackageName

这个就是包名,打开清单文件,把com.by.amapdemo拷进去就可以

image.png


或者打开APP下的Gradle,把applicationId拷进去

image.png

在Android Studio中配置

在APP下Gradle中添加所需要的Gradle依赖,这里我只使用定位和POISearch,因此,我只添加这两个

image.png

设置对so库的支持

ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "arm64-v8a", "x86_64" }

image.png

在清单文件配置

添加权限

 //地图包、搜索包需要的基础权限<!--允许程序打开网络套接字--><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" />

添加KEY

这里应该替换为自己的KEY

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

配置如图

image.png

代码实现

对高德地图进行初始化,设置精度,时间间隔等

 private void initLocate() {    //声明mLocationOption对象
    AMapLocationClientOption mLocationOption = null;
    mlocationClient = new AMapLocationClient(this);    //初始化定位参数
    mLocationOption = new AMapLocationClientOption();    //设置定位监听
    mlocationClient.setLocationListener(this);    //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
    mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);    //设置定位间隔,单位毫秒,默认为2000ms
    mLocationOption.setInterval(2000);
    mLocationOption.setOnceLocationLatest(true);    //设置定位参数
    mlocationClient.setLocationOption(mLocationOption);    // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
    // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
    // 在定位结束后,在合适的生命周期调用onDestroy()方法
    // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
    //启动定位
    mlocationClient.startLocation();
}

定位后成功进行回调,进行POISearch

 @Overridepublic void onLocationChanged(AMapLocation amapLocation) {    if (amapLocation != null) {        if (amapLocation.getErrorCode() == 0) {            //定位成功回调信息,设置相关消息
            amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
            double latitude = amapLocation.getLatitude();//获取纬度
            double longitude = amapLocation.getLongitude();//获取经度
            amapLocation.getAccuracy();//获取精度信息
            Log.d("haha", amapLocation.getAddress());
            LocationInfo locationInfo = new LocationInfo();
            locationInfo.setAddress(amapLocation.getAddress());
            locationInfo.setLatitude(latitude);
            locationInfo.setLonTitude(longitude);
            mList.clear();
            mList.add(locationInfo);
            mAdapter.notifyDataSetChanged();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date(amapLocation.getTime());
            df.format(date);//定位时间
            PoiSearch.Query query = new PoiSearch.Query("", "生活服务", "");
            query.setPageSize(20);
            PoiSearch search = new PoiSearch(this, query);
            search.setBound(new PoiSearch.SearchBound(new LatLonPoint(latitude, longitude), 10000));
            search.setOnPoiSearchListener(this);
            search.searchPOIAsyn();

        } else {            //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
            Log.e("AmapError", "location Error, ErrCode:"
                    + amapLocation.getErrorCode() + ", errInfo:"
                    + amapLocation.getErrorInfo());
        }
    }
}

POISearch成功回调展示

  @Overridepublic void onPoiSearched(PoiResult result, int i) {
    PoiSearch.Query query = result.getQuery();
    ArrayList<PoiItem> pois = result.getPois();    for (PoiItem poi : pois) {
        String name = poi.getCityName();
        String snippet = poi.getSnippet();
        LocationInfo info = new LocationInfo();
        info.setAddress(snippet);
        LatLonPoint point = poi.getLatLonPoint();

        info.setLatitude(point.getLatitude());
        info.setLonTitude(point.getLongitude());
        mList.add(info);
        Log.d("haha", "poi" + snippet);

    }

    mAdapter.notifyDataSetChanged();
}

运行如图:


image.png


代码地址:AmapDemo



作者:木子饼干
链接:https://www.jianshu.com/p/8490b09c06d9


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP