刚弄完这两个功能,当然是结合官网例子实现的。效果还行,稍作优化便可整合到app使用。在这里做一下总结,及说明下我的思路。
刚开始上手感觉比较乱学起来也比较累,方法,类太多,直接复制各种错,还不知道为什么这么做。现在我们一起交流下实现的思路:
1:定位:这是所有地图功能实现的基础,所以不管要实现诸如周边搜索啊,导航啊什么的都需要基于定位。
如何定位:官网上例子也很详细,主要是实现几个监听,并实现方法:
aMap.setLocationSource(this);// 设置定位监听
//绑定监听
mapLocationClient.setLocationListener(this);
//开启定位
mapLocationClient.startLocation();
监听的实现方法:
public void onLocationChanged(AMapLocation aMapLocation)
定位实现:
//激活定位的重写
public void activate(OnLocationChangedListener onLocationChangedListener)
//取消定位的重写
public void deactivate()
定位成功与否会有返回码,返回码对照如下(来自官网):
0 定位成功。
1 一些重要参数为空,如context;请对定位传递的参数进行非空判断。
2 定位失败,由于仅扫描到单个wifi,且没有基站信息。
3 获取到的请求参数为空,可能获取过程中出现异常。
4 请求服务器过程中的异常,多为网络情况差,链路不通导致,请检查设备网络是否通畅。
5 返回的XML格式错误,解析失败。
6 定位服务返回定位失败,如果出现该异常,请将errorDetail信息通过API@autonavi.com反馈给我们。
7 KEY建权失败,请仔细检查key绑定的sha1值与apk签名sha1值是否对应。
8 Android exception通用错误,请将errordetail信息通过API@autonavi.com反馈给我们。
9 定位初始化时出现异常,请重新启动定位。
10 定位客户端启动失败,请检查AndroidManifest.xml文件是否配置了APSService定位服务
11 定位时的基站信息错误,请检查是否安装SIM卡,设备很有可能连入了伪基站网络。
12 缺少定位权限,请在设备的设置中开启app的定位权限。
2:搜索,周边搜索 :有了定位,便有了搜索里面的要求的条件(经纬度等),然后就可以慢慢实现功能了。
搜索功能靠一下方法和监听:
PoiSearch.Query query=PoiSearch.Query(keyWord,type,city);
PoiSearch poiSearch = new PoiSearch(this,query);
poiSearch.setOnPoiSearchListener(this);//设置回调数据的监听器
poiSearch.searchPOIAsyn();//开始搜索
监听的回调方法:
public void onPoiSearched(PoiResult poiResult, int i)
public void onPoiItemSearched(PoiItem poiItem, int i)
搜索返回码对照(来自官网)本文最后:
实例:
功能介绍:定位,周边搜索(可选择搜索范围:1000-5000米(spinner下拉实现))
代码:
清单文件:
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 用于访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--与activity标签同级-->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你的key值" />
<service android:name="com.amap.api.location.APSService" />
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/search_edit"
android:hint="输入关键字"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/map" />
<Spinner
android:id="@+id/juli"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/map"
android:layout_toEndOf="@+id/search_button">
</Spinner>
<Button
android:id="@+id/search_button"
android:text