高德地图开发(一)显示地图与定位
2017-10-01 17:48
671 查看
如果地图功能随处可见,应用很广,这里利用高德地图的SDK来实现地图的显示以及定位功能。如需要详细了解参考官网信息http://lbs.amap.com/api/android-sdk/summary
使用高德地图你还得需要一个key。注册一个高德地图账号,在开发者平台 进入右上角的控制台,在应用管理中新建一个应用就可以获取到key了。
首先官网下载SDK包http://lbs.amap.com/api/android-sdk/download,如果你下载的是2D地图则只有一个jar包,拷贝放入项目的libs文件夹里面,右键选择add as library即可。如果是3D包的话,则里面除了一个jar还有相关的so文件,你不仅要导入jar还得导入相关so文件。在main文件夹下建一个jnilibs文件夹,把所有的so文件放进去即可。如图
然后注册文件中加个meta-data,里面的name是固定的,但是value是你获取的key。加相关权限,权限有点多,管它有没有用,都加上。<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gdmap">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--value处加上自己申请的key-->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="1bfdd3600775f90d9953ca0351836006"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
布局文件中写一个地图视图<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
然后是主活动,只要你将调用了mapview.oncreate方法,地图就能显示出来,其他的都是定位相关的操作,代码中都有说明。
最后来一张效果图
使用高德地图你还得需要一个key。注册一个高德地图账号,在开发者平台 进入右上角的控制台,在应用管理中新建一个应用就可以获取到key了。
首先官网下载SDK包http://lbs.amap.com/api/android-sdk/download,如果你下载的是2D地图则只有一个jar包,拷贝放入项目的libs文件夹里面,右键选择add as library即可。如果是3D包的话,则里面除了一个jar还有相关的so文件,你不仅要导入jar还得导入相关so文件。在main文件夹下建一个jnilibs文件夹,把所有的so文件放进去即可。如图
然后注册文件中加个meta-data,里面的name是固定的,但是value是你获取的key。加相关权限,权限有点多,管它有没有用,都加上。<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gdmap">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--value处加上自己申请的key-->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="1bfdd3600775f90d9953ca0351836006"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
布局文件中写一个地图视图<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
然后是主活动,只要你将调用了mapview.oncreate方法,地图就能显示出来,其他的都是定位相关的操作,代码中都有说明。
package com.example.gdmap; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener{ MapView mapView=null;//地图视图 AMap aMap;//地图对象 OnLocationChangedListener mlistener;//定位监听 AMapLocationClient client;//定位者 AMapLocationClientOption option;//定位参数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView= (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);//创建地图 init(); } public void init(){ aMap=mapView.getMap();//获取地图对象 UiSettings settings=aMap.getUiSettings();//获取定位按钮 aMap.setLocationSource(this);//设置定位监听 settings.setMyLocationButtonEnabled(true);//显示定位按钮 aMap.setMyLocationEnabled(true);//显示定位层并可触发定位 } //activate初始化定位 @Override public void activate(OnLocationChangedListener onLocationChangedListener) { mlistener=onLocationChangedListener; client=new AMapLocationClient(this); client.setLocationListener(this);//定位回调监听 option=new AMapLocationClientOption(); option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//高进度定位 client.setLocationOption(option);//加载定位参数 client.startLocation();//开始定位 } //deactivate停止定位 @Override public void deactivate() { mlistener = null; if (client != null) { client.stopLocation(); client.onDestroy(); } client = null; } //定位成功后回调函数 @Override public void onLocationChanged(AMapLocation aMapLocation) { if(mlistener!=null){ if(aMapLocation!=null&&aMapLocation.getErrorCode()==0){ Log.e("经度: ", String.valueOf(aMapLocation.getLatitude())); Log.e("纬度: ", String.valueOf(aMapLocation.getLongitude())); Log.e("地址:",aMapLocation.getAddress()); mlistener.onLocationChanged(aMapLocation); } else Log.e("定位结果","定位失败"); } } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); if(client!=null) client.onDestroy(); } }这样定位有点bug,首先它默认隔两秒就定位一次,一直在定位,有时候我们只需要定位一次或让它在指定的时候就开始定位。查阅相关文档后发现两个AmaplocaionClientoption中的方法,设置时间间隔setInterval,设置只定位一次setOnceLocation。还有就是只有第一次定位成功,其他时候都定位失败,错误码为10,这个错误码是启动服务失败。因为没手动加服务。加上定位服务即可。
<service android:name="com.amap.api.location.APSService"></service>
最后来一张效果图
相关文章推荐
- iOS开发:高德地图显示、定位、反地理编码
- 判断一个坐标点是否在一个无规则的多边形内 (iOS定位服务与地图应用开发:高德地图开发)
- Android开发之高德地图实现定位
- 【高德地图开发】---地图显示
- 【高德地图开发3】---地图显示
- android------之高德地图实现定位和3D地图显示
- 高德地图API开发应用-----地图显示+定位+marker
- Android开发之高德地图实现定位
- Android简单实现高德地图显示及定位
- php--------网页开发实现微信JS的(定位,地图显示,照片选择功能)
- Android简单实现高德地图显示及定位
- 高德地图定位按钮位置显示
- 高德地图定位 poi搜索 移动地图选址显示周边
- andro studio高德地图开发:显示定位蓝点
- 百度地图开发之二[地图定位显示]
- 关于高德地图Android开发时地图只显示一次、第二次打开不定位的解决办法
- Android初级开发(十)——百度定位—在地图上显示你的位置
- Android高德地图开发--读取解析KML文件并显示在地图上
- 高德地图开发(一)显示地图
- php--------网页开发实现微信JS的(定位,地图显示,照片选择功能)