TIP:百度地图已经有了,那么高德还会远吗?
现在我们就来集成一下高德地图的使用吧
1、进入高德开发者平台
2:进行key值得获取
集成
集成主要修改两个文件:
1:AndroidManifest.xml
2:build.gradle
往AndroidManifest.xml中添加权限以及apikey,apikey必须与平台的key一致:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hdc.test">
<!--地图包、搜索包需要的基础权限 -->
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<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">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="624fbeb44e525a70bcaa3756b9a18ae8"/>
</application>
</manifest>
build.gradle中设置SO库架构以及高德地图的jar包:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.hdc.test"
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//高德地图配置开始
ndk {
//设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64"
}
//高德地图配置结束
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//高德地图配置开始
//3D地图so及jar
implementation 'com.amap.api:3dmap:latest.integration'
//定位功能
implementation 'com.amap.api:location:latest.integration'
//搜索功能
implementation 'com.amap.api:search:latest.integration'
//高德地图配置结束
}
也可通过拷贝添加SDK、Jar包方式方式进行配置。
调用:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.amap.api.maps.MapView>
</RelativeLayout>
package com.hdc.test;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
/**
* 这是调用者
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MapView mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);// 此方法必须重写
AMap aMap = mapView.getMap();
}
}
这时候地图已经显示出来了,先别急着实现,如果你想要定位的话,可以继续往下看,首先,我们可以先获取字体的定位,也就是不显示在地图上的定位,获取文字位置
我写了个专门定位的类,然后使用方法就是在需要定位的Acitivity或者Fragment implement LocationCallBack 即可
public class MapLocationHelper implements AMapLocationListener {
/**
* 声明mlocationClient对象
*/
private AMapLocationClient mLocationClient;
/**
* 声明mLocationOption对象
*/
public AMapLocationClientOption mLocationOption = null;
private LocationCallBack mLocationCallBack;
private Context mContext;
public MapLocationHelper(Context context) {
mContext = context;
initLocation();
}
public MapLocationHelper(Context context, LocationCallBack locationCallback) {
mContext = context;
mLocationCallBack = locationCallback;
initLocation();
}
/**
* 初始化定位参数
*/
private void initLocation() {
mLocationClient = new AMapLocationClient(mContext);
mLocationOption = new AMapLocationClientOption();
// 设置定位监听
mLocationClient.setLocationListener(this);
// 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
// 设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000);
// 设置定位参数
mLocationClient.setLocationOption(mLocationOption);
}
/**
* 设置回调
* @param locationCallBack
*/
public void setLocationCallBack(LocationCallBack locationCallBack){
mLocationCallBack = locationCallBack;
}
/**
* 开启定位
*/
public void startMapLocation() {
if (!mLocationClient.isStarted()) {
mLocationClient.startLocation();
}
}
/**
* 停止定位服务
*/
public void stopMapLocation() {
if (mLocationClient.isStarted()) {
mLocationClient.stopLocation();
}
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
// 可在其中解析amapLocation获取相应内容。
mLocationCallBack.onCallLocationSuc(aMapLocation);
stopMapLocation();
} else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
stopMapLocation();
}
} else {
stopMapLocation();
}
}
}
(2)创建LocationCallBack接口
public interface LocationCallBack {
void onCallLocationSuc(AMapLocation location);
}
(3)使用定位:
(4)初始化:
(4)拿到定位数据:
(5)打印结果:
这是第一种
第二种是显示在地图上的集成方法
public class MapsActivity extends AppCompatActivity {
private MapView mMapView;
private AMap aMap;
private Button mBtn;
/**
* 这是调用者
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
mMapView = (MapView) findViewById(R.id.mapp);
mMapView.onCreate(savedInstanceState);// 此方法必须重写
if (aMap == null) {
//地图管理类
aMap = mMapView.getMap();
}
//实现定位
initLocation();
}
private void initLocation() {
MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(10000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
aMap.moveCamera(CameraUpdateFactory.zoomTo(18));
UiSettings uiSettings = aMap.getUiSettings();
/**
* 设置地图是否可以手势滑动
*/
mUiSettings.setScrollGesturesEnabled(true);
/**
* 设置地图是否可以手势缩放大小
*/
mUiSettings.setZoomGesturesEnabled(true);
/**
* 设置地图是否可以倾斜
*/
mUiSettings.setTiltGesturesEnabled(true);
/**
* 设置地图是否可以旋转
*/
mUiSettings.setRotateGesturesEnabled(true);
uiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);//设置放缩图标在右下
uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);//设置logo的位置 在左下角
aMap.moveCamera(CameraUpdateFactory.zoomTo(10));//设置地图的放缩
}
@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);
}
}
好了,至此,地图的普通集成已经实现完成。
文章很短,路还漫长,大家好,我是玖玖君,一个帅气与才华并存的男人,我们下期再见
网友评论