高德地图API使用心得分享
来源:互联网 发布:阿拉斯加大学 知乎 编辑:程序博客网 时间:2024/06/07 23:20
本文为要点流程,仅供参考;
如何进行高德地图API使用?
1.初始化
个人开发者账户-配置key(需要RSA签名)-注意包名要匹配
2.本地项目修改包名(视情况),并配置权限;
3.测试,如果错误,观察错误码,现在高德地图的错误中包含错误提示信息,非常好用;
4.注意6.0的权限机制;
代码仅供参考
import android.graphics.Color;import android.os.Bundle;import android.util.Log;import com.amap.api.location.AMapLocation;import com.amap.api.location.AMapLocationListener;import com.amap.api.maps2d.AMap;import com.amap.api.maps2d.CameraUpdateFactory;import com.amap.api.maps2d.LocationSource;import com.amap.api.maps2d.MapView;import com.amap.api.maps2d.model.BitmapDescriptorFactory;import com.amap.api.maps2d.model.LatLng;import com.amap.api.maps2d.model.Marker;import com.amap.api.maps2d.model.MarkerOptions;import com.amap.api.maps2d.model.MyLocationStyle;/** * -- 实现mapview * -- 实现小蓝点功能 * -- 实现自定义小蓝点 * -- 实现定位Location * -- 实现添加marker * -- 实现自定义marker(带布局,点击事件等等) */public class MineMapActivity extends BaseActivity implements AMapLocationListener { private static final int FILL_COLOR = Color.argb(100, 0, 0, 180); private static final int STROKE_COLOR = Color.BLACK; private static final float ZOOMSIZE = 10; private MapView mMapview; private AMap mAmap; private LocationSource.OnLocationChangedListener mLocationChangedListener; private LocationTool mLocationTool; @Override protected int getLayoutId() { return R.layout.activity_mine_map; } @Override protected void afterOnCreate(Bundle savedInstanceState) { mMapview = (MapView) findViewById(R.id.map); mMapview.onCreate(savedInstanceState); init(mMapview); initData(); } private void init(MapView mapview) { // initGlobalParams if (mLocationTool == null) { mLocationTool = new LocationTool(MineMapActivity.this, MineMapActivity.this); } if (mAmap == null) { mAmap = mapview.getMap(); initAmap(); initMarker(); } } private void initMarker() { /* aMap.setOnMarkerDragListener(this);// 设置marker可拖拽事件监听器 aMap.setOnMapLoadedListener(this);// 设置amap加载成功事件监听器 aMap.setOnMarkerClickListener(this);// 设置点击marker事件监听器 aMap.setInfoWindowAdapter(this);// 设置自定义InfoWindow样式 */ mAmap.setOnInfoWindowClickListener(new AMap.OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker marker) { ToastUtil.show(MineMapActivity.this, "infoWindow-marker被点击了"); } });// 设置点击infoWindow事件监听器 // 往地图上添加marker LatLng latlng = new LatLng(39.761, 116.434); Marker marker = getMarker(latlng); // 设置默认显示一个infowinfow marker.showInfoWindow(); } private Marker getMarker(LatLng latlng) { // 想切换marker的图片的话,用 // BitmapDescriptorFactory.fromResource(R.drawable.arrow) return mAmap.addMarker(new MarkerOptions() .position(latlng) .title("催收人员") .snippet("第1号")// .icon(BitmapDescriptorFactory// .defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) .icon(BitmapDescriptorFactory.fromResource(R.drawable.img_map_other_mission)) .draggable(true)); } private void initAmap() { // 设置点击事件 mAmap.setOnMapClickListener(new AMap.OnMapClickListener() { @Override public void onMapClick(LatLng latLng) { //latView.setText(String.valueOf(arg0.latitude)); //lngView.setText(String.valueOf(arg0.longitude)); ToastUtil.show(MineMapActivity.this, "map被点击了"); } }); // 定位监听 mAmap.setLocationSource(new LocationSource() { @Override public void activate(OnLocationChangedListener l) { mLocationChangedListener = l; mLocationTool.startLocation(); } @Override public void deactivate() { mLocationChangedListener = null; mLocationTool.stopLocation(); } }); // 显示定位按钮 mAmap.getUiSettings().setMyLocationButtonEnabled(true); mAmap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false setupLocationStyle(); } /** * 设置样式 */ private void setupLocationStyle() { // 自定义系统定位蓝点 MyLocationStyle myLocationStyle = new MyLocationStyle(); // 自定义定位蓝点图标 myLocationStyle.myLocationIcon(BitmapDescriptorFactory.// fromResource(R.drawable.location_marker)); fromResource(R.drawable.img_map_current_position)); // 自定义精度范围的圆形边框颜色 myLocationStyle.strokeColor(STROKE_COLOR); //自定义精度范围的圆形边框宽度 myLocationStyle.strokeWidth(5); // 设置圆形的填充颜色 myLocationStyle.radiusFillColor(FILL_COLOR); // 将自定义的 myLocationStyle 对象添加到地图上 mAmap.setMyLocationStyle(myLocationStyle); } private void initData() { } @Override /** * 定位监听 在这里可获得具体的地理位置,经纬度等等 * 可参考LocationTool中的默认实现 */ public void onLocationChanged(AMapLocation amapLocation) { if (mLocationChangedListener != null && amapLocation != null) { if (amapLocation.getErrorCode() == 0) { //mLocationErrText.setVisibility(View.GONE); mLocationChangedListener.onLocationChanged(amapLocation);// 显示系统小蓝点 mAmap.moveCamera(CameraUpdateFactory.zoomTo(ZOOMSIZE)); } else { String errText = "定位失败," + amapLocation.getErrorCode() + ": " + amapLocation.getErrorInfo(); Log.e("AmapErr", errText); //mLocationErrText.setVisibility(View.VISIBLE); //mLocationErrText.setText(errText); } } } @Override protected void onPause() { super.onPause(); mMapview.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapview.onSaveInstanceState(outState); } @Override protected void onResume() { super.onResume(); mMapview.onResume(); } @Override protected void onDestroy() { super.onDestroy(); mLocationTool.destroyLocation(); mMapview.onDestroy(); }}
LocationTool为我自己封装的类,代码如下:
import android.content.Context;import com.amap.api.location.AMapLocation;import com.amap.api.location.AMapLocationClient;import com.amap.api.location.AMapLocationClientOption;import com.amap.api.location.AMapLocationListener;/** * Created by Alk on 2017/7/3. * LocationUtil 工具类 */public class LocationTool { private AMapLocationClient locationClient; private AMapLocationClientOption locationOption; public LocationTool(Context context, AMapLocationListener locationListener) { if (locationListener != null) { this.locationListener = locationListener; } //初始化client locationClient = new AMapLocationClient(context); initLocation(); } /** * 初始化定位 * * @since 2.8.0 */ public void initLocation() { // 设置定位模式 initLocationOption(AMapLocationClientOption.AMapLocationMode.Battery_Saving); //设置定位参数 locationClient.setLocationOption(locationOption); // 设置定位监听 locationClient.setLocationListener(locationListener); } /** * 初始化定位模式 * * @param checkedId checkedId */ public void initLocationOption(AMapLocationClientOption.AMapLocationMode checkedId) { if (null == locationOption) { locationOption = new AMapLocationClientOption(); } // 分别为低功耗,设备模式,高精度模式 if (checkedId == AMapLocationClientOption.AMapLocationMode.Battery_Saving) { locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving); } else if (checkedId == AMapLocationClientOption.AMapLocationMode.Device_Sensors) { locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors); } else if (checkedId == AMapLocationClientOption.AMapLocationMode.Hight_Accuracy) { locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); } // 初始化 resetOption(new LocationOptionObject()); } /** * 定位监听 */ AMapLocationListener locationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation location) { if (null != location) { StringBuilder sb = new StringBuilder(); //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明 if (location.getErrorCode() == 0) { sb.append("定位成功" + "\n"); sb.append("定位类型: " + location.getLocationType() + "\n"); sb.append("经 度 : " + location.getLongitude() + "\n"); sb.append("纬 度 : " + location.getLatitude() + "\n"); sb.append("精 度 : " + location.getAccuracy() + "米" + "\n"); sb.append("提供者 : " + location.getProvider() + "\n"); sb.append("速 度 : " + location.getSpeed() + "米/秒" + "\n"); sb.append("角 度 : " + location.getBearing() + "\n"); // 获取当前提供定位服务的卫星个数 sb.append("星 数 : " + location.getSatellites() + "\n"); sb.append("国 家 : " + location.getCountry() + "\n"); sb.append("省 : " + location.getProvince() + "\n"); sb.append("市 : " + location.getCity() + "\n"); sb.append("城市编码 : " + location.getCityCode() + "\n"); sb.append("区 : " + location.getDistrict() + "\n"); sb.append("区域 码 : " + location.getAdCode() + "\n"); sb.append("地 址 : " + location.getAddress() + "\n"); sb.append("兴趣点 : " + location.getPoiName() + "\n"); //定位完成的时间 //sb.append("定位时间: " + LocationUtils.formatUTC(location.getTime(), "yyyy-MM-dd HH:mm:ss") + "\n"); } else { //定位失败 sb.append("定位失败" + "\n"); sb.append("错误码:" + location.getErrorCode() + "\n"); sb.append("错误信息:" + location.getErrorInfo() + "\n"); sb.append("错误描述:" + location.getLocationDetail() + "\n"); } //定位之后的回调时间 //sb.append("回调时间: " + LocationUtils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n"); //解析定位结果, String result = sb.toString(); //tvResult.setText(result); } else { //tvResult.setText("定位失败,loc is null"); } } }; /** * 默认的定位参数 * * @since 2.8.0 */ private AMapLocationClientOption getDefaultOption() { AMapLocationClientOption mOption = new AMapLocationClientOption(); mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式 mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭 mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效 mOption.setInterval(2000);//可选,设置定位间隔。默认为2秒 mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是true mOption.setOnceLocation(false);//可选,设置是否单次定位。默认是false mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用 AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP mOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是false mOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差 mOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为true return mOption; } /** * 根据控件的选择,重新设置定位参数 */ public void resetOption(LocationOptionObject optionObject) { // 设置是否需要显示地址信息 locationOption.setNeedAddress(optionObject.isAddress); /** * 设置是否优先返回GPS定位结果,如果30秒内GPS没有返回定位结果则进行网络定位 * 注意:只有在高精度模式下的单次定位有效,其他方式无效 */ locationOption.setGpsFirst(optionObject.isGpsFirst); // 设置是否开启缓存 locationOption.setLocationCacheEnable(optionObject.isCacheAble); // 设置是否单次定位 locationOption.setOnceLocation(optionObject.isOnceLocation); //设置是否等待设备wifi刷新,如果设置为true,会自动变为单次定位,持续定位时不要使用 locationOption.setOnceLocationLatest(optionObject.isOnceLastest); //设置是否使用传感器 locationOption.setSensorEnable(optionObject.isSensorAble); //设置是否开启wifi扫描,如果设置为false时同时会停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差 try { // 设置发送定位请求的时间间隔,最小值为1000,如果小于1000,按照1000算 locationOption.setInterval(optionObject.etInterval); } catch (Throwable e) { e.printStackTrace(); } try { // 设置网络请求超时时间 locationOption.setHttpTimeOut(optionObject.etHttpTimeout); } catch (Throwable e) { e.printStackTrace(); } // 设置定位参数 locationClient.setLocationOption(locationOption); } /** * 开始定位 * 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, * 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 * 在定位结束后,在合适的生命周期调用onDestroy()方法 * 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 * * @since 2.8.0 */ public void startLocation() { // 启动定位 locationClient.startLocation(); } /** * 停止定位 */ public void stopLocation() { // 停止定位 if (locationClient != null) { locationClient.stopLocation(); } } /** * 销毁定位 * * @since 2.8.0 */ public void destroyLocation() { if (null != locationClient) { /** * 如果AMapLocationClient是在当前Activity实例化的, * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy */ stopLocation(); locationClient.onDestroy(); locationClient = null; locationOption = null; } } /** * 定位配置参数 */ public static class LocationOptionObject { /** * 设置是否需要显示地址信息 */ public boolean isAddress = true; /** * 设置是否优先返回GPS定位结果,如果30秒内GPS没有返回定位结果则进行网络定位 * 注意:只有在高精度模式下的单次定位有效,其他方式无效 */ public boolean isGpsFirst; /** * 设置是否开启缓存 */ public boolean isCacheAble = true; /** * 设置是否单次定位 */ public boolean isOnceLocation = true; /** * 设置是否等待设备wifi刷新,如果设置为true,会自动变为单次定位,持续定位时不要使用 */ public boolean isOnceLastest; /** * 设置是否使用传感器 */ public boolean isSensorAble; /** * 设置发送定位请求的时间间隔,最小值为1000,如果小于1000,按照1000算 */ public long etInterval = 2000; /** * 设置网络请求超时时间 */ public long etHttpTimeout = 3000; }}
阅读全文
0 0
- 高德地图API使用心得分享
- 使用高德地图api常见方法心得(1)
- ios-关于使用高德地图api心得(1)
- 高德地图使用心得
- 高德地图使用心得,百度地图使用心得
- 高德地图基础功能使用心得
- 高德地图的使用心得
- 高德地图基础功能使用心得
- 百度地图API & 高德地图API 使用问题汇总
- 高德地图API使用效果图
- 高德地图的API使用教程
- 使用高德地图API进行定位
- 高德地图Js API的使用
- 读书笔记(七)高德地图API使用
- android使用高德地图api
- 高德地图 API 的简易使用
- 高德地图 API 的简易使用
- 使用高德地图API无法定位
- Xshell的使用 Xshell配色及其编码设置
- 13. Roman to Integer的C++解法
- python改字体崩溃,打不开idle
- Java中的事务——JDBC事务和JTA事务
- solaris操作系统损坏,恢复数据库
- 高德地图API使用心得分享
- 今日小程序推荐:清单plus-他人经验,可以攻玉
- C++ 宏定义#define 中##的使用
- Android:支持多选的本地相册
- 矩阵快速幂
- C#用API如何遍历所有窗口句柄
- Node.js初学笔记(使用InteliJ IDEA创建的项目)
- 推荐系统学习--基于item的协同过滤算法及python实现
- PT项目--含税价PB00采购定价方案实例之二