Android开发:集成高德地图实现定位、检索周边地址

    技术2024-06-02  72

    需求

    1.后台传给我们一个经纬度,然后需要我们在地图上显示出来 2.当我们点击地图的时候进入到第二个界面,实现当前位置的定位,并且检索周边的商家地址,点击后将选中的地址回传,并显示,而我们上传给后台的是经纬度。同时当我们平移地图时我们的列表也会同步刷新(其实就是监听地图滑动,获取中心点的经纬度,再检索周边)

    谷歌搜索高德SDK,进入官网选择开发支持,点击Android地图SDK 接着就是按着官方的接入流程集成SDK,需要认证开发者(免费的,支付宝认证就可以),申请应用获取key,注意了:申请的时候包名要和你app项目的包名一样,也就是你的applicationId,拿到key之后就可以开始集成了 1.依赖 在Project的build.gradle文件中配置repositories,添加maven或jcenter仓库地址 Android Studio默认会在Project的build.gradle为所有module自动添加jcenter的仓库地址,如果已存在,则不需要重复添加。Project的build.gradle文件在Project目录中位置如图所示:

    配置如下: Java allprojects { repositories { jcenter() // 或者 mavenCentral() } }

    在主工程的build.gradle文件配置dependencies,这种方式不需要会给你自动依赖最新版本的SDK

    android { defaultConfig { ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" } } } dependencies { implementationfileTree(dir: 'libs', include: ['*.jar']) //3D地图so及jar implementation'com.amap.api:3dmap:latest.integration' //定位功能 implementation'com.amap.api:location:latest.integration' //搜索功能 implementation'com.amap.api:search:latest.integration' }

    然后下个官方demo把demo中的libs下的so库复制到你的项目libs目录下(官方文档好像说通过Gradle集成SDK不需要引入so库的,但是我集成的时候不行,看到demo也是Gradle集成SDK,并且也引了so库,后来我复制过来就可以了)最后再build.grale下引入libs

    defaultConfig { sourceSets { main { jniLibs.srcDir 'libs' } }

    在androidManifest.xml中加入各种权限,与及你在官网申请得到的key

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.nnmzkj.cartrepair"> <application android:name=".app.AppAplication" android:allowBackup="true" android:icon="@mipmap/logn" android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <!-- 配置高德SDK的key --> <meta-data android:name="com.amap.api.v2.apikey" android:value="5301d767b47de1b27cf835a34a4849bb" /> </application> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <!-- 地图包、搜索包需要的基础权限 --> <!-- 允许程序打开网络套接字 --> <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 允许程序设置内置sd卡的写权限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 允许程序获取网络状态 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许程序访问WiFi网络信息 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许程序读写手机状态和身份 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序访问CellID或WiFi热点来获取粗略的位置 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> </manifest>

    完成这一步之后你的SDK就已经集成完毕

    接下来就是实现我们的功能: 1.我们从后台拿到经纬度,需要显示在地图上,并标记该位置 首先在xml中添加MapView

    <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="180dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />

    在java文件中获取该控件,并初始化地图控制器对象,并将地图移动到指定经纬度,并标记出该点

    //获取地图控件引用 @BindView(R.id.map) MapView mMapView; private AMap aMap = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); //初始化地图控制器对象 if (aMap == null) { aMap = mMapView.getMap(); } initAMap(); } /** * 移动到指定经纬度 * @para i 经度 * @param y 维度 * @param zoo 缩放倍数 */ private void initAMap(double i, double y, float zoo) { //22.83542400, 108.35450500 AMap mAMap = mMapView.getMap(); CameraPosition cameraPosition = new CameraPosition(new LatLng(i, y), zoo, 0, 30); CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition); mAMap.moveCamera(cameraUpdate); drawMarkers(i, y); } /** * 画定位标记图 * @para i 经度 * @param y 维度 */ public void drawMarkers(double i, double y) { aMap.clear(true); MarkerOptions markerOptions = new MarkerOptions() .position(new LatLng(i, y)) .draggable(true); Marker marker = aMap.addMarker(markerOptions); marker.showInfoWindow(); }

    2.修改定位地址,就是启动一个新的activity,首先我们需要启动定位获取当前的位置,并且标记出当前的位置(记得android6.0以上要动态申请权限),同时检索周边的地址(返回的是一个地址对象集合,我们用recyclerview把数据展示出来即可),同时要对地图滑动进行监听,当地图移动的时候拿到中心点的位置,然后重新搜索附近地址,刷新列表。当点击列表item的时候就把你点击的地址对象返回上一个activity即可,里面包含了经纬度等信息。 所以第一步:定位,并显示当前的位置

    //获取地图控件引用 @BindView(R.id.map) MapView mMapView; private AMap aMap = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //获取地图控件引用 //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); //初始化地图控制器对象 if (aMap == null) { aMap = mMapView.getMap(); } init(); } /** * 初始化定位 */ private void init() { MyLocationStyle myLocationStyle; //初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。 myLocationStyle = new MyLocationStyle(); myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//定位一次,且将视角移动到地图中心点。 //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 myLocationStyle.interval(2000); //设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。 myLocationStyle.showMyLocation(true); //设置定位蓝点的Style aMap.setMyLocationStyle(myLocationStyle); //设置显示比例 aMap.moveCamera(CameraUpdateFactory.zoomTo(14f)); // 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 aMap.setMyLocationEnabled(true); //设置显示比例 aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() { //定位回调 @Override public void onMyLocationChange(Location location) { Log.e("tag", location.toString()); local = location; initAMap(local.getLatitude(), local.getLongitude(), 14f); aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { } @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { cameraBean = cameraPosition; initAMap(cameraPosition.target.latitude, cameraBean.target.longitude, cameraBean.zoom); } }); } }); } //移动到指定经纬度 private void initAMap(double i, double y, float zoo) { //22.83542400, 108.35450500 AMap mAMap = mMapView.getMap(); CameraPosition cameraPosition = new CameraPosition(new LatLng(i, y), zoo, 0, 30); CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition); mAMap.moveCamera(cameraUpdate); drawMarkers(i, y); } //画定位标记图 public void drawMarkers(double i, double y) { aMap.clear(true); MarkerOptions markerOptions = new MarkerOptions() .position(new LatLng(i, y)) .draggable(true); Marker marker = aMap.addMarker(markerOptions); marker.showInfoWindow(); query("", i, y); }

    第二步:检索周边地址,需要实现PoiSearch.OnPoiSearchListener接口,并重写该接口的俩个方法

    /** *周边检索地址调 * @param poiResult * @param i */ @Override public void onPoiSearched(PoiResult poiResult, int i) { multitemPoiItemList = new ArrayList<>(); //poiResult.getPois()获取的是周边地址集合,接下来就是自己用recyclerview展示数据了 for (PoiItem poiItem : poiResult.getPois()) { multitemPoiItemList.add(new MultitemPoiItem(MultitemPoiItem.UNSELECT, poiItem)); } gaoDeMapListAdapter = new GaoDeMapListAdapter(multitemPoiItemList); rvContent.setLayoutManager(new LinearLayoutManager(mContext)); rvContent.setAdapter(gaoDeMapListAdapter); gaoDeMapListAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { Intent intent =getIntent(); //返回选中的地址 intent.putExtra("poiItem",multitemPoiItemList.get(position).getPoiItem()); setResult(RE_CODE,intent); AppManager.getAppManager().finishActivity(); } }); } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } /** * 查询周边地址,你可以在每次定位中心点后开始查询 * @param keyWord 关键词 * @param i 经度 * @param y 纬度 */ private void query(String keyWord ,double i, double y) { PoiSearch.Query query = new PoiSearch.Query(keyWord, "", ""); //keyWord表示搜索字符串, //第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字) //cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索 query.setPageSize(50);// 设置每页最多返回多少条poiitem query.setPageNum(0);//设置查询页码 PoiSearch poiSearch = new PoiSearch(GaoDeMapLocationActivity.this, query); poiSearch.setBound(new PoiSearch.SearchBound(new LatLonPoint(i, y), 800));//设置周边搜索的中心点以及半径 poiSearch.setOnPoiSearchListener(GaoDeMapLocationActivity.this); poiSearch.searchPOIAsyn(); }

    第三步:监听地图的平移缩放,重新获取周边地址,实现AMap.OnCameraChangeListener接口,一般我们是在定位之后再开始进行监听

    //地址定位监听 aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() { //定位回调 @Override public void onMyLocationChange(Location location) { Log.e("tag", location.toString()); local = location; initAMap(local.getLatitude(), local.getLongitude(), 14f); //地图平移缩放监听 aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { } /地图平移缩放监听回调 @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { cameraBean = cameraPosition; initAMap(cameraPosition.target.latitude, cameraBean.target.longitude, cameraBean.zoom); } }); } });

    最后附上整个activity代码,因为activity继承与自己的基类等等,代码仅供参考,直接复制无用:

    package com.nnmzkj.dcqx.activity; import android.Manifest; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Color; import android.location.Location; import android.os.Bundle; import android.view.View; import android.widget.TextView; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.OnClick; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdate; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.MapView; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.MyLocationStyle; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.core.PoiItem; import com.amap.api.services.geocoder.GeocodeResult; import com.amap.api.services.geocoder.GeocodeSearch; import com.amap.api.services.geocoder.RegeocodeQuery; import com.amap.api.services.geocoder.RegeocodeResult; import com.amap.api.services.poisearch.PoiResult; import com.amap.api.services.poisearch.PoiSearch; import com.chad.library.adapter.base.BaseQuickAdapter; import com.github.lazylibrary.util.ToastUtils; import com.kongzue.dialog.v3.WaitDialog; import com.nnmzkj.common.base.BaseNetworkActivity; import com.nnmzkj.common.manager.AppManager; import com.nnmzkj.common.utils.DialogUtil; import com.nnmzkj.dcqx.R; import com.nnmzkj.dcqx.adapter.GaoDeMapListAdapter; import com.nnmzkj.dcqx.bean.MultitemPoiItem; import com.nnmzkj.dcqx.widget.FairySearchView; import com.tbruyelle.rxpermissions2.RxPermissions; import io.reactivex.functions.Consumer; import java.util.ArrayList; import java.util.List; /** * Date : 2020/7/1 * Author : Davaid.lvfujiang * Desc :高德定位 */ public class GaoDeMapLocationActivity extends BaseNetworkActivity implements PoiSearch.OnPoiSearchListener, GeocodeSearch.OnGeocodeSearchListener { public static final int RE_CODE = 1001; public static final float ZOOMTO = 16f; @BindView(R.id.rv_content) RecyclerView rvContent; @BindView(R.id.map) MapView mMapView; @BindView(R.id.search_view) FairySearchView searchView; @BindView(R.id.tv_search) TextView tvSearch; private AMap aMap; private Location local; private CameraPosition cameraBean; private GaoDeMapListAdapter gaoDeMapListAdapter; private List<MultitemPoiItem> multitemPoiItemList = new ArrayList<>(); private GeocodeSearch geocoderSearch; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //获取地图控件引用 //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); //初始化地图控制器对象 aMap = mMapView.getMap(); requestPermission(); } /** * 动态申请权限 */ @SuppressLint("WrongConstant") private void requestPermission() { RxPermissions rxPermissions = new RxPermissions(this); //申请定位权限 rxPermissions.request(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION) .subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean granted) throws Exception { if (granted) { init(); } else { // 权限被拒绝 ToastUtils.showToast(mContext, "权限已被禁用,功能无法正常使用!"); } } }); } /** * 初始化定位 */ private void init() { location(); } private void location() { //初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。 MyLocationStyle myLocationStyle = new MyLocationStyle(); //定位一次,且将视角移动到地图中心点。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 myLocationStyle.interval(2000); // 设置圆形的填充颜色 myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)); // 设置圆形的边框颜色 myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0)); //设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。 myLocationStyle.showMyLocation(true); //设置定位蓝点的Style aMap.setMyLocationStyle(myLocationStyle); //设置显示比例 aMap.moveCamera(CameraUpdateFactory.zoomTo(ZOOMTO)); // 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 aMap.setMyLocationEnabled(true); aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() { //定位回调 @Override public void onMyLocationChange(Location location) { local = location; geocoderSearch = new GeocodeSearch(GaoDeMapLocationActivity.this); geocoderSearch.setOnGeocodeSearchListener(GaoDeMapLocationActivity.this); //拿到数据使用逆地理编码解析地址(坐标转地址) LatLonPoint latLonPoint = new LatLonPoint(local.getLatitude(), local.getLongitude()); RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200, GeocodeSearch.AMAP); geocoderSearch.getFromLocationAsyn(query); } }); } /** * mMapView移动中心点到指定经纬度 * * @param lat 经度 * @param lng 维度 * @param zoo 缩放大小 */ private void initAMap(double lat, double lng, float zoo) { //22.83542400, 108.35450500 CameraPosition cameraPosition = new CameraPosition(new LatLng(lat, lng), zoo, 0, 30); CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition); aMap.moveCamera(cameraUpdate); drawMarkers(lat, lng); } /** * 画定位标记图 * * @param lat * @param lng */ public void drawMarkers(double lat, double lng) { //清除之前的定位标记图 aMap.clear(true); MarkerOptions markerOptions = new MarkerOptions() .position(new LatLng(lat, lng)) .draggable(true); Marker marker = aMap.addMarker(markerOptions); marker.showInfoWindow(); } /** * 检索中心点附近的地址 * * @param keyWord 关键词 * @param lat * @param lng */ private void query(String keyWord, double lat, double lng) { DialogUtil.waitDialog(mContext, "正在搜索周边地址..."); //keyWord表示搜索字符串, //第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字) //cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索 PoiSearch.Query query = new PoiSearch.Query(keyWord, "", ""); // 设置每页最多返回多少条poiitem query.setPageSize(50); //设置查询页码 query.setPageNum(0); PoiSearch poiSearch = new PoiSearch(GaoDeMapLocationActivity.this, query); //设置周边搜索的中心点以及半径 poiSearch.setBound(new PoiSearch.SearchBound(new LatLonPoint(lat, lng), 800)); poiSearch.setOnPoiSearchListener(GaoDeMapLocationActivity.this); poiSearch.searchPOIAsyn(); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 if (mMapView != null) { mMapView.onDestroy(); } } @Override protected int getLayoutResId() { return R.layout.activity_gao_de_map_location; } @Override protected void initView() { //搜索框点击软键盘右下角搜索按钮监听 searchView.setOnEnterClickListener(new FairySearchView.OnEnterClickListener() { @Override public void onEnterClick(String s) { //根据关键词搜索订单 query(s, cameraBean.target.latitude, cameraBean.target.longitude); } }); //点击搜索框右侧搜索按钮监听 tvSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //根据关键词搜索订单 query(searchView.getSearchText(), cameraBean.target.latitude, cameraBean.target.longitude); } }); } @Override protected void initData() { } @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); } @OnClick(R.id.tv_complete) public void handleOnclick(View view) { if (view.getId() == R.id.tv_complete) { MultitemPoiItem multitemPoiItem = getMultitemPoiItem(); if (multitemPoiItem == null) { ToastUtils.showToast(mContext, "请选择地址!"); } else { Intent intent = getIntent(); intent.putExtra("poiItem", multitemPoiItem.getPoiItem()); setResult(RE_CODE, intent); AppManager.getAppManager().finishActivity(); } } } /** * 获取选中的地址对象 */ public MultitemPoiItem getMultitemPoiItem() { MultitemPoiItem multitemPoiItem = null; for (MultitemPoiItem item : multitemPoiItemList) { if (item.getType() == MultitemPoiItem.SELECT) { multitemPoiItem = item; break; } } return multitemPoiItem; } /** * @param poiResult * @param i */ @Override public void onPoiSearched(PoiResult poiResult, int i) { //关闭等待loading窗口 WaitDialog.dismiss(); multitemPoiItemList = new ArrayList<>(); for (PoiItem poiItem : poiResult.getPois()) { multitemPoiItemList.add(new MultitemPoiItem(MultitemPoiItem.UNSELECT, poiItem)); } gaoDeMapListAdapter = new GaoDeMapListAdapter(multitemPoiItemList); rvContent.setLayoutManager(new LinearLayoutManager(mContext)); rvContent.setAdapter(gaoDeMapListAdapter); gaoDeMapListAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { MultitemPoiItem multitemPoiItem = multitemPoiItemList.get(position); for (MultitemPoiItem item : multitemPoiItemList) { item.setType(MultitemPoiItem.UNSELECT); } //选中地址后刷新列表,将选中的item设置为选中状态 multitemPoiItem.setType(MultitemPoiItem.SELECT); gaoDeMapListAdapter.notifyDataSetChanged(); //并画该地址的定位标记 drawMarkers(multitemPoiItem.getPoiItem().getLatLonPoint().getLatitude(), multitemPoiItem.getPoiItem().getLatLonPoint().getLongitude()); } }); } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } /** * 是否支持滑动返回。这里在父类中默认返回 true 来支持滑动返回,如果某个界面不想支持滑动返回则重写该方法返回 false 即可 * * @return */ @Override public boolean isSupportSwipeBack() { return false; } /** * 获取定位地址数据回调 * * @param regeocodeResult * @param resultCode */ @Override public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int resultCode) { //定位成功 switch (resultCode) { case 1000: //定位成功后初始化中心点,并绘制标记点 initAMap(local.getLatitude(), local.getLongitude(), ZOOMTO); //开始检索周边的商家地址 query("", local.getLatitude(), local.getLongitude()); //地图缩放平移监听 aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { } @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { cameraBean = cameraPosition; //重新设置中心点,并重新检索周边地址 initAMap(cameraPosition.target.latitude, cameraBean.target.longitude, cameraBean.zoom); query("", cameraPosition.target.latitude, cameraBean.target.longitude); } }); break; case 1008: ToastUtils.showToast(mContext, "定位失败,MD5安全码未通过验证!"); break; case 1802: case 1804: case 1806: ToastUtils.showToast(mContext, "定位失败,请检查您的网络!"); break; case 1012: ToastUtils.showToast(mContext, "定位失败,请检查您的权限!"); break; case 1200: ToastUtils.showToast(mContext, "定位失败,请检查您的定位服务是否已经开启!"); break; default: ToastUtils.showToast(mContext, "定位失败!"); break; } } @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { } }
    Processed: 0.011, SQL: 9