大家好,欢迎来到IT知识分享网。
一、获取高德KEY
首先进入高德控制台,在我的应用中点击”添加key”,如下图所示:
其中需要填写的发布版SHA1、调试版SHA1和PackageName获取方式如下:
1.发布版SHA1:
首先需要创建自己项目的发布版SHA1:在Android Studio中build下面点击“Generate Signed Bundle or APK, 选择APK,点击next:
选择Creat new…来创建key,选择好存放目录,并设置密码。next后选择release,点击Finish完成创建
然后找到自己电脑的jdk安装目录,进入./bin文件夹,其中会有keytool.exe,在./bin文件夹中右键鼠标,点击在终端中打开,输入下面“bin>”后面的代码:
E:\java\bin> ./keytool.exe -list -v -keystore D:\自己的key保存目录\自己的key命名.jks
然后输入前面设置的密码,成功获得发布版SHA1。
2.调试版SHA1:
首先找到自己的debug.keystore位置,一般在C盘下的用户目录内:C:\Users\自己的用户名\.android\debug.keystore。
再找到自己电脑的jdk安装目录,进入./bin文件夹,其中会有keytool.exe,在./bin文件夹中右键鼠标,点击在终端中打开,输入下面“bin>”后面的代码:
E:\java\bin> .\keytool.exe -list -v -keystore C:\Users\自己的用户名\.android\debug.keystore
然后输入密码,默认密码为:android,成功获得调试版SHA1。
3.PackageName:
这个在自己的项目中的AndroidManifest.xml获取: package = “所需要的PackageName”
完成上述三步后就得到了高德地图的KEY
二、相关变量定义(随着更新丰富)
在java文件目录的实现类Activity中粘贴
private MapView mMapView = null; private AMap aMap = null; private LatLng latLng_me = null; private boolean firstOpen = true;
三、创建地图
1.应用高德KEY
在AndroidManifest.xml中<application>标签里面粘贴:
<meta-data android:name="com.amap.api.v2.apikey" android:value="获取的高德KEY"/>
2.申请权限
在AndroidManifest.xml中<application>标签外面粘贴:(方便起见我把后面会用到的所有权限全部给出)
<!--允许访问网络,必选权限--> <uses-permission android:name="android.permission.INTERNET" /> <!--允许获取粗略位置,若用GPS实现定位小蓝点功能则必选--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允许获取wifi网络信息,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--允许获取wifi状态改变,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!--允许写入扩展存储,用于数据缓存,若无此权限则写到私有目录--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允许读设备等信息,用于问题排查--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明--> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <!--用与导航状态中保持屏幕常亮--> <uses-permission android:name="android.permission.WAKE_LOCK"/>
3.创建地图layout
在布局文件activity_layout.xml中粘贴:
<com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>
4.实现地图生命周期
在实现类Activity中粘贴
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); //隐私合规接口 MapsInitializer.updatePrivacyShow(getApplicationContext(), true, true); MapsInitializer.updatePrivacyAgree(getApplicationContext(), true); //基础库设置允许采集个人及设备信息 AMapUtilCoreApi.setCollectInfoEnable(true); //创建地图 mMapView = (MapView) findViewById(R.id.map); mMapView.onCreate(savedInstanceState); @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); }
然后运行即可完成创建地图。
四、实现定位
1.动态权限申请(android系统太安全了)
对于现在版本的android,我们需要在实现类Activity中实现启动app时再次申请所需要的权限,在进行定位之前位置粘贴:
//检查权限是否允许(动态申请权限) List<String> permissionList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.INTERNET); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_NETWORK_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_WIFI_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.CHANGE_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.CHANGE_WIFI_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.WAKE_LOCK) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WAKE_LOCK); } if (!permissionList.isEmpty()) { String[] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(MapActivity_fast.this, permissions, 1); }
2.进行定位
//初始化地图控制器对象 aMap = mMapView.getMap(); aMap.setTrafficEnabled(true);// 显示实时交通状况 aMap.getUiSettings().setZoomControlsEnabled(false);//设置地图缩放按钮不显示 aMap.moveCamera(CameraUpdateFactory.zoomTo(16));//设置初始缩放大小 //实现定位监听器 aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange(Location location) { //这里返回定位的经纬度 latLng_me = new LatLng(location.getLatitude(), location.getLongitude()); //这里在第一次打开时将地图位置自动定位到自己所在处 if(firstOpen) { aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng_me)); firstOpen = false; } } }); //初始化定位蓝点样式类 MyLocationStyle myLocationStyle = new MyLocationStyle(); //连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER); //设置连续定位模式下的定位间隔,只在连续定位模式下生效, 单次定位模式下不会生效。单位为毫秒。 myLocationStyle.interval(3000); aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮显示 aMap.setMyLocationEnabled(true);// 设置启动显示定位蓝点
然后运行即可实现定位。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120442.html






