首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息

网站:http://lbs.amap.com/api/android-sdk/guide/create-project/get-key

途中包含了发布版的SHA1安全码和测试版SHA1安全码,两者的值可以看

照做就一定会获取的。

这里我讲发布版和调试版都用的relase版本的sha1

之后再去下载相应的Jar包,这里我用的是

3D地图的jar包

注意:2D地图的jar包,与3D地图的jar包因为接口有一样的,导致冲突无法使用。

在jnilibs下放入一下文件

因为有些人的android studio无法显示,但又不报错(我就这样)。你就需要将以上红圈类容放入libs,才能显示

之后在

将导入的jar包添加到类包;

选择,找到于自己名字一样的Jar,添加就可以了。之后检查在build.gradle 是否添加了以下类容

compile files('libs/AMap3DMap_5.1.0_AMapSearch_5.1.0_AMapLocation_3.4.0_20170518.jar')compile 'com.android.support:appcompat-v7:24.2.1'compile 'com.android.support.constraint:constraint-layout:1.0.2'testCompile 'junit:junit:4.12'

并且设置jar包的位置为libs

dependencies {compile fileTree(include: ['*.jar'], dir: 'libs')androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations'})

在androidManifest.xml中添加自己的添加权限

<!-- 用于进行网络定位 --><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" /><!-- 用于申请调用A-GPS模块 --><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><!-- 用于申请获取蓝牙信息进行室内定位 --><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

  添加自己的key

<meta-dataandroid:name="com.amap.api.v2.apikey"android:value="你的key" />

  添加定位方法

<service android:name="com.amap.api.location.APSService" />

  

在Activity_main.xml中添加

<TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/text1"/>
<com.amap.api.maps.MapViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:id="@+id/map"></com.amap.api.maps.MapView>

在MainActivty的主代码

public class MainActivity extends AppCompatActivity implements AMapLocationListener,GeocodeSearch.OnGeocodeSearchListener {private Button button;private AMapLocationClient locationClient = null;private AMapLocationClientOption locationOption = null;private TextView textView;private String[] strMsg;private com.amap.api.maps.AMap aMap;private MapView mapView;private GeocodeSearch geocoderSearch;private Marker geoMarker;private static LatLonPoint latLonPoint;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView)findViewById(R.id.text1);textView = (TextView)findViewById(R.id.textView2);button=(Button)findViewById(R.id.button);mapView = (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);// 此方法必须重写Location();final Intent intent=new Intent();intent.setAction("Utils");button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Bundle data =new Bundle();data.putString("msg","签到成功");intent.putExtra("data",data);sendBroadcast(intent);}});}private void initMap(){if (aMap == null) {aMap = mapView.getMap();//用高德默认图标geoMarker= aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));//自定义图标//geoMarker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)//   .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.punch_dw))));}geocoderSearch = new GeocodeSearch(this);geocoderSearch.setOnGeocodeSearchListener(this);getAddress(latLonPoint);}@Overridepublic void onLocationChanged(AMapLocation loc) {if (null != loc) {Message msg = mHandler.obtainMessage();msg.obj = loc;msg.what = Utils.MSG_LOCATION_FINISH;mHandler.sendMessage(msg);}}Handler mHandler = new Handler() {public void dispatchMessage(android.os.Message msg) {switch (msg.what) {//定位完成case Utils.MSG_LOCATION_FINISH:String result = "";try {AMapLocation loc = (AMapLocation) msg.obj;result = Utils.getLocationStr(loc, 1);strMsg = result.split(",");Toast.makeText(MainActivity.this, "定位成功", Toast.LENGTH_LONG).show();textView.setText("地址:" + strMsg[0] + "\n" + "经    度:" + strMsg[1] + "\n" + "纬    度:" + strMsg[2]+"\n");latLonPoint= new LatLonPoint(Double.valueOf(strMsg[2]), Double.valueOf(strMsg[1]));initMap();} catch (Exception e) {Toast.makeText(MainActivity.this, "定位失败", Toast.LENGTH_LONG).show();}break;default:break;}};};public void Location() {// TODO Auto-generated method stubtry {locationClient = new AMapLocationClient(this);locationOption = new AMapLocationClientOption();// 设置定位模式为低功耗模式locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);// 设置定位监听locationClient.setLocationListener(this);locationOption.setOnceLocation(true);//设置为单次定位locationClient.setLocationOption(locationOption);// 设置定位参数// 启动定位locationClient.startLocation();mHandler.sendEmptyMessage(Utils.MSG_LOCATION_START);} catch (Exception e) {Toast.makeText(MainActivity.this, "定位失败", Toast.LENGTH_LONG).show();}}/*** 响应逆地理编码围栏*/public void getAddress(final LatLonPoint latLonPoint) {RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 100,GeocodeSearch.AMAP);// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是网络   坐标系还是GPS原生坐标系geocoderSearch.getFromLocationAsyn(query);// 设置同步逆地理编码请求}/*** 地理编码查询回调*/@Overridepublic void onGeocodeSearched(GeocodeResult result, int rCode) {}/*** 逆地理编码回调*/@Overridepublic void onRegeocodeSearched(RegeocodeResult result, int rCode) {if (rCode == 1000) {if (result != null && result.getRegeocodeAddress() != null&& result.getRegeocodeAddress().getFormatAddress() != null) {Toast.makeText(MainActivity.this,result.getRegeocodeAddress().getFormatAddress()+ "附近",Toast.LENGTH_LONG).show();aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(AMapUtil.convertToLatLng(latLonPoint), 15));geoMarker.setPosition(AMapUtil.convertToLatLng(latLonPoint));} else {}} else {}}@Overridepublic void onResume() {super.onResume();mapView.onResume();}/*** 方法必须重写*/@Overridepublic void onPause() {super.onPause();mapView.onPause();}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}@Overridepublic void onDestroy() {super.onDestroy();mapView.onDestroy();}
}

在同级的文件下建立自己的类方法,调用到主代码中

AMapUtil代码为:

public class AMapUtil {/*** 判断edittext是否null*/public static String checkEditText(EditText editText) {if (editText != null && editText.getText() != null&& !(editText.getText().toString().trim().equals(""))) {return editText.getText().toString().trim();} else {return "";}}public static Spanned stringToSpan(String src) {return src == null ? null : Html.fromHtml(src.replace("\n", "<br />"));}public static String colorFont(String src, String color) {StringBuffer strBuf = new StringBuffer();strBuf.append("<font color=").append(color).append(">").append(src).append("</font>");return strBuf.toString();}public static String makeHtmlNewLine() {return "<br />";}public static String makeHtmlSpace(int number) {final String space = " ";StringBuilder result = new StringBuilder();for (int i = 0; i < number; i++) {result.append(space);}return result.toString();}public static String getFriendlyLength(int lenMeter) {if (lenMeter > 10000) // 10 km{int dis = lenMeter / 1000;return dis + "";}if (lenMeter > 1000) {float dis = (float) lenMeter / 1000;DecimalFormat fnum = new DecimalFormat("##0.0");String dstr = fnum.format(dis);return dstr;}if (lenMeter > 100) {int dis = lenMeter / 50 * 50;return dis + "";}int dis = lenMeter / 10 * 10;if (dis == 0) {dis = 10;}return dis + "";}public static boolean IsEmptyOrNullString(String s) {return (s == null) || (s.trim().length() == 0);}/*** 把LatLng对象转化为LatLonPoint对象*/public static LatLonPoint convertToLatLonPoint(LatLng latlon) {return new LatLonPoint(latlon.latitude, latlon.longitude);}/*** 把LatLonPoint对象转化为LatLon对象*/public static LatLng convertToLatLng(LatLonPoint latLonPoint) {return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());}/*** 把集合体的LatLonPoint转化为集合体的LatLng*/public static ArrayList<LatLng> convertArrList(List<LatLonPoint> shapes) {ArrayList<LatLng> lineShapes = new ArrayList<LatLng>();for (LatLonPoint point : shapes) {LatLng latLngTemp = AMapUtil.convertToLatLng(point);lineShapes.add(latLngTemp);}return lineShapes;}/*** long类型时间格式化*/public static String convertToTime(long time) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(time);return df.format(date);}public static final String HtmlBlack = "#000000";public static final String HtmlGray = "#808080";public static String getFriendlyTime(int second) {if (second > 3600) {int hour = second / 3600;int miniate = (second % 3600) / 60;return hour + "小时" + miniate + "分钟";}if (second >= 60) {int miniate = second / 60;return miniate + "分钟";}return second + "秒";}public static String getBusPathTitle(BusPath busPath) {if (busPath == null) {return String.valueOf("");}List<BusStep> busSetps = busPath.getSteps();if (busSetps == null) {return String.valueOf("");}StringBuffer sb = new StringBuffer();for (BusStep busStep : busSetps) {if (busStep.getBusLines().size() > 0) {RouteBusLineItem busline = busStep.getBusLines().get(0);if (busline == null) {continue;}String buslineName = getSimpleBusLineName(busline.getBusLineName());sb.append(buslineName);sb.append(" > ");}if (busStep.getRailway() != null) {RouteRailwayItem railway = busStep.getRailway();sb.append(railway.getTrip() + "(" + railway.getDeparturestop().getName()+ " - " + railway.getArrivalstop().getName() + ")");sb.append(" > ");}}return sb.substring(0, sb.length() - 3);}public static String getBusPathDes(BusPath busPath) {if (busPath == null) {return String.valueOf("");}long second = busPath.getDuration();String time = getFriendlyTime((int) second);float subDistance = busPath.getDistance();String subDis = getFriendlyLength((int) subDistance);float walkDistance = busPath.getWalkDistance();String walkDis = getFriendlyLength((int) walkDistance);return String.valueOf(time + " | " + subDis + " | 步行" + walkDis);}public static String getSimpleBusLineName(String busLineName) {if (busLineName == null) {return String.valueOf("");}return busLineName.replaceAll("\\(.*?\\)", "");}}

  

Utils的主代码为:

public class Utils {/*** 开始定位*/public final static int MSG_LOCATION_START = 0;/*** 定位完成*/public final static int MSG_LOCATION_FINISH = 1;/*** 停止定位*//*** 根据定位结果返回定位信息的字符串** @return*/public synchronized static String getLocationStr(AMapLocation location, final int index) {if (null == location) {return null;}StringBuffer sb = new StringBuffer();//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");if (location.getProvider().equalsIgnoreCase(android.location.LocationManager.GPS_PROVIDER)) {// 以下信息只有提供者是GPS时才会有sb.append("速    度    : " + location.getSpeed() + "米/秒" + "\n");sb.append("角    度    : " + location.getBearing() + "\n");// 获取当前提供定位服务的卫星个数sb.append("星    数    : "+ location.getSatellites() + "\n");} else {// 提供者是GPS时是没有以下信息的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");return (location.getAddress() + "," + location.getLongitude() + "," + location.getLatitude());}
//这个方法可以进行反向的地理围栏圈定          //if(location.getLatitude()==“纬度”||location.getLongitude()==“经度”){//    sb.append("可以签到"+"\n");//  return sb.toString();//  }//  else {//     sb.append("不可签到"+"\n");//    }//    }else {//定位失败sb.append("定位失败" + "\n");sb.append("错误码:" + location.getErrorCode() + "\n");sb.append("错误信息:" + location.getErrorInfo() + "\n");sb.append("错误描述:" + location.getLocationDetail() + "\n");return sb.toString();}return sb.toString();}}

  如果要使用那个逆地理的编码围栏,你需要自己设定button控件的响应事件,通过返回值来控制button是否开启

转载于:https://www.cnblogs.com/LiangPF/p/6932501.html

android studio高德地图的显示于定位(附带逆地理编码围栏)相关推荐

  1. 高德地图-根据经纬度获取地址(逆地理编码)

    1.需要资源: 高德地图搜索SDK以及相关SDk下载地址 2.根据经纬度得到具体地址: 1.这里需要用到地图搜索SDK: 2.通过逆地理编码来实现. 3.示例代码: @Overrideprotecte ...

  2. Android使用高德地图api实现基础定位

    Android使用高德地图api实现基础定位(一) 关于 会获取SHA1的可自行跳过这一步 第二步引用高德sdk 第三步修改MainActivity.java 关于 这篇主要讲如何使用高德sdk(不是 ...

  3. python调用百度地图api定位_逆地理编码 rgc 反geo检索 | 百度地图API SDK

    使用方法 如不访问境外POI,走以下服务使用流程 编码说明 API请求中需要用到中文或一些特殊字符的参数,如query.region等,为了避免提交到后台乱码,需要对这几个参数值进行编码处理,转换成U ...

  4. Unity GPS定位之逆地理编码(获取经纬度并转换成地理位置)

    unity定位 前言 最近在做一款手游,然后策划给的需求就是定位到当前用户所在的城市,然后花了一个上午给做了出来,思路大概就是通过手机定位获取到当前位置的经度和纬度,然后通过各个地图(我这里用的是百度 ...

  5. android studio高德地图的基本使用

    1.key和SHA1 1.在高德地图上申请key 具体详情内容,请参考官方获取key的方法 2.开发模式(debug)和发布模式(release)下的 SHA1 值是不同的,发布 apk时 需要根据发 ...

  6. Android studio 高德地图开发

    先看官网 链接: 高德官网. 1. 第一步,配置AndroidManifest.xml <!--允许程序打开网络套接字--> <uses-permission android:nam ...

  7. Android 解决高德地图签名后无法定位的问题

    前一段时间,我做了一个关于地图的应用,调试的时候一切正常,签名后就无法正常定位.刚开始以为是6.0动态权限问题改变的原因,应用的调试版本和签名后的版本SHA1值是不同的,而在平台上只用了调试版本的SH ...

  8. Android使用高德和风天气Sdk获取定位实况天气数据(二)

    Android使用高德和风天气Sdk获取定位实况天气数据(二) 先看一下效果 关于 实现 第一步,引用高德api与和风天气 第二步,修改AndroidManifest.xml 第三步,修改activi ...

  9. ios 百度地图指定区域_ios百度地图的使用(普通定位、反地理编码)

    iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下: #import 使用到的头文件 要引入CoreLocation这个包 使用的代理名称 //1. ...

最新文章

  1. 谨慎能捕千秋蝉(二)——CSRF
  2. Ubuntu 14.04 上使用 Nginx 部署 Laravel 4.2
  3. 跟踪Makefile输出调试信息
  4. 手动抛出异常_Java异常处理最佳实践及陷阱防范
  5. 利用Runtime为Category添加属性
  6. 把代码迁移动Google Code里
  7. 笔记-delphi7高效数据库程序设计
  8. matlab 整数规划 非线性,非线性整数规划matlab
  9. 如何测量多个变量之间的非线性关系
  10. ubuntu 桌面卡死,鼠标能动但是点击无效。
  11. unik的命令行-解释说明
  12. Python入门学习笔记1-Python基础
  13. 鲲鹏devkit开发套件——编译调试工具介绍
  14. 命令控制qq自动申请远程控制
  15. Ubuntu kylin 14.04下的spark1.0.1安装
  16. 中国家庭的七大饮食问题
  17. python马蜂窝网站的爬取和简单分析。
  18. dll文件的注册与删除
  19. Vue天地图之图层类型切换
  20. 第一批组团去太空旅游的人,不是活人

热门文章

  1. 近似商标可以申请吗?
  2. mac移动鼠标光标会变大_如何在Mac上使鼠标光标变大或变小
  3. Listener refused the connection with the following error
  4. 保研夏令营、考研复试、出国时个人陈述模板与撰写注意事项
  5. 外卖优惠券返利分销系统外卖返利系统公众号小程序源码saas系统
  6. 为某一目录创建Internet来宾账户
  7. 九轴传感器姿态----AHRS算法开源项目推荐
  8. Linux服务器出现方向键、退格键乱码等现象解决
  9. workbench3.2学习笔记三
  10. lt路由器的虚拟服务器如何使用,路由器设置局域网内服务器