高德地图集成之基础定位
来源:互联网 发布:sublimetext3 python 编辑:程序博客网 时间:2024/05/16 11:21
1、高德官网注册开发者账号并申请Ak
2、下载响应的jar包和so文件,放到app下的libs文件夹
3、build.gradle中配置sourceSets
android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "net.edaibu.gaodemap" minSdkVersion 19 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } }}
4、Manifest配置权限和service以及申请的Ak
<!-- Normal Permissions 不需要运行时注册 --> <!--获取运营商信息,用于支持提供运营商信息相关的接口--> <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.CHANGE_CONFIGURATION" /> <!-- 请求网络 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 不是SDK需要的权限,是示例中的后台唤醒定位需要的权限 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 需要运行时注册的权限 --> <!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--用于提高GPS定位速度--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据--> <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" /> <!-- 更改设置 --> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 3.2.0版本增加 --> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- 3.2.0版本增加--> <uses-permission android:name="android.permission.BLUETOOTH" />配置ak
<meta-data android:name="com.amap.api.v2.apikey" android:value="6df41e5973583c4b0ce9a9df9c11bf43"/> <!-- 定位需要的服务 --> <service android:name="com.amap.api.location.APSService" > </service>
5、layout中添加布局
<com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" />
6、Activity中初始化
private MapView mMapView; private AMap aMap;
mMapView = (MapView) findViewById(R.id.map); mMapView.onCreate(savedInstanceState); aMap = mMapView.getMap();
7、初始化地图
/** * 初始化地图 */ private void initMap() { myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类 myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style initMapUi(); initLocationStyle(); limitMapArea(); }
8、设置地图UI显示
/** * 设置地图UI显示 */ private void initMapUi() { UiSettings uiSettings = aMap.getUiSettings(); uiSettings.setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。 uiSettings.setZoomControlsEnabled(false); //关闭放大缩小按钮// uiSettings.setCompassEnabled(true);//显示罗盘// uiSettings.setScaleControlsEnabled(true);//显示比例尺// uiSettings.setLogoPosition(0);//设置logo位置 aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 // 设置定位监听 aMap.setLocationSource(this); // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false aMap.setMyLocationEnabled(true); //设置缩放级别 cameraUpdate = CameraUpdateFactory.zoomTo(17); }
9、设置地图定位样式
/** * 设置地图定位样式 */ private void initLocationStyle() { // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种// aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。 //以下四种模式从5.1.0版本开始提供// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。10、地图定位回调
/** * 激活定位 */ @Override public void activate(OnLocationChangedListener listener) { Log.e("tag", "激活定位"); mListener = listener; if (mlocationClient == null) { //初始化定位 mlocationClient = new AMapLocationClient(this); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位回调监听 mlocationClient.setLocationListener(this); //设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation();//启动定位 } } /** * 停止定位 */ @Override public void deactivate() { Log.e("tag", "停止定位"); mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } /** * 定位回调 * * @param aMapLocation */ @Override public void onLocationChanged(AMapLocation aMapLocation) { if (mListener != null && aMapLocation != null) { if (aMapLocation != null && aMapLocation.getErrorCode() == 0) { mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点 //直接放大到指定倍数 //aMap.moveCamera(cameraUpdate); //动画效果放大到指定倍数 aMap.animateCamera(cameraUpdate); Log.e("tag", "定位成功"); } else { String errText = "定位失败," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo(); Log.e("AmapErr", errText); } } }
11、设置地图截屏管理
/** * 对地图进行截屏 */ private void snapShotMap() { aMap.getMapScreenShot(new AMap.OnMapScreenShotListener() { @Override public void onMapScreenShot(Bitmap bitmap) { } @RequiresApi(api = Build.VERSION_CODES.N) @Override public void onMapScreenShot(Bitmap bitmap, int status) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); if (null == bitmap) { return; } try { FileOutputStream fos = new FileOutputStream( Environment.getExternalStorageDirectory() + "/test_" + sdf.format(new Date()) + ".png"); boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); try { fos.flush(); } catch (IOException e) { e.printStackTrace(); } try { fos.close(); } catch (IOException e) { e.printStackTrace(); } StringBuffer buffer = new StringBuffer(); if (b) buffer.append("截屏成功 "); else { buffer.append("截屏失败 "); } if (status != 0) buffer.append("地图渲染完成,截屏无网格"); else { buffer.append("地图未渲染完成,截屏有网格"); } Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_SHORT); } catch (FileNotFoundException e) { e.printStackTrace(); } } }); }
12、地图生命周期管理
@Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); if (null != mlocationClient) { mlocationClient.onDestroy(); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); }
13、可以根据经纬度限制地图显示的范围
/** * 限制地图显示范围 */ private void limitMapArea() { LatLng southwestLatLng = new LatLng(40.789925, 116.838326); LatLng northeastLatLng = new LatLng(38.740688, 114.647472); LatLngBounds latLngBounds = new LatLngBounds(southwestLatLng, northeastLatLng); aMap.setMapStatusLimits(latLngBounds); }
最终效果图
阅读全文
0 0
- 高德地图集成之基础定位
- 高德地图之基础地图和定位
- android高德地图定位集成
- Andorid 集成高德地图显示,定位
- 高德定位地图的集成
- 高德地图之定位:
- Android之高德地图定位SDK集成及地图功能实现
- iOS 集成高德地图无法定位问题
- android-2(集成高德地图,定位显示)
- 集成高德地图SDK实现实时定位
- Android第三方框架之学习高德地图SDK-----①集成环境,获取定位信息,地图显示。
- 高德地图api之location定位
- Android之高德地图定位
- Android之高德地图定位
- iOS高德地图之定位
- 高德地图之纯粹定位
- 高德地图API之IP定位
- Android高德地图之定位
- TensorFlow学习笔记(10)--实现AlexNet
- Codeforces Round #416 (Div. 2) C Vladik and Memorable Trip
- 【C语言】统计随机数中数字出现个数,并打印直方图
- 两数组的交
- 海岛争霸
- 高德地图集成之基础定位
- CentOS安装Dubbo管理控制台
- InvalidDataAccessApiUsageException SpringMVC Spring Hibernate 整合
- 【数据结构】C# 面向对象思想完成三种排序
- java中路径的区分
- 网页qq客服链接
- 编译imu_3dm_gx4-master 节点编译错误
- redis集群java实践问题记录
- opencv学习笔记(3) 锐化图像 邻域操作 ROI