赞
踩
android studio版本信息如下:
SDK版本如下:
1.配置高德api应用,获取key
2.导入项目依赖文件以及参数
打开官方下载地址下载3D地图合包,解压后获得一个jar包和几个文件,如下:
打开android工程,将jar包拖入工程的libs下,在main目录下新建文件夹jniLibs,把除jar以外的文件放入其中,如下:
对jar包进行add to library操作,如果右键没有出现此选项,可参考没有add as library选项
在AndroidManifest.xml中配置如下权限
<!--允许程序打开网络套接字--> <uses-permission android:name="android.permission.INTERNET" /> <!--允许程序设置内置sd卡的写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允许程序读写手机状态和身份--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--允许程序访问CellID或WiFi热点来获取粗略的位置--> <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"/> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <!--如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限--> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明--> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> 在application下添加如下: <meta-data android:name="com.amap.api.v2.apikey" android:value="你的开发key"> </meta-data> <service android:name="com.amap.api.location.APSService"></service>
在你的布局文件中中引入
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
到这里,前期的准备就做完了,你也可以参考官方流程,更全面一些。
地图显示的代码如下
public class Map extends AppCompatActivity { MapView mMapView = null; //初始化地图控制器对象 AMap aMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mMapView.getMap(); } } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mMapView.onDestroy(); } @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); }
这样运行就可以看到地图了
我第一次做时,调试版的SHA1按官方操作流程是直接拿到了,而当我因为编译器版本老旧(大概gradle才1.3.2),所以重装了编译器,当我再获取调试版的SHA1时,出现了如下错误
并不是密码错误,因为这玩意默认就是android,我后来也一直没找到解决办法,当然其实开发这功能并不需要这个调试版的SHA1。
以下只是我的一厢情愿:但是当我填了之前的(没更新编译器)SHA1时,控制台报了错误,错误代码在高德的错误对照表上为授权失败,于是我找到了这篇高德地图key验证失败,至此我得到了想要的结果了。
不建议在模拟器上运行,直接用真机(USB调试,WiFi调试)。当然本篇文章并没有书写关于精确定位的代码,但是如果要实现的话,必须在真机上进行,模拟器上看会出现定位点不在你所在的位置,或者直接对错误对照表上的6,如果真机上运行还是不行,建议手机上开启一下它的定位权限,这点很重要。
如果需要定位到自己的位置的地图显示,可直接下载:github地址
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。