1.在写代码之前应当下好相应的高德地图SDK,官网上面就有下载之后导入就可以
2.配置好相关的lib包并添加依赖
在main文件中创建jnilibs文件夹,将SDK中的so文件导入进去
在build.gradle文件android中配置so文件
sourceSets{
main{
jniLibs.srcDirs=['libs']
}
}
3.在Manifest文件中添加各种权限,地图及定位权限
<!--用于进行网络定位-->
<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"/>
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序访问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.READ_PHONE_STATE" />
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
在Application中注册服务组件
<service android:name="com.amap.api.location.APSService"></service>
添加key信息,申请key的办法在官网上面有
<meta-data android:name="com.amap.api.v2.apikey"
android:value="自己申请的key">
</meta-data>
4.layout布局文件,直接添加一个mapview控件就行了很简单,我多添加了一个开关按钮,用来切换地图
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 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"
android:layout_marginBottom="55dp"
/>
<ToggleButton
android:id="@+id/btn_mapchange"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:textOn="@string/map_name_2"
android:textOff="@string/map_name_1"/>
</FrameLayout>
5.fragment中的代码
package com.lqx.ui.amazingdialog;
/**
* Created by NEDUsoftware on 2016/11/3.
*/
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
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.model.MyLocationStyle;
public class FindFragment extends Fragment implements CompoundButton.OnCheckedChangeListener,LocationSource,AMapLocationListener {
private MapView mapView;
private AMap aMap;
private ToggleButton btn_mapchange;
private MyLocationStyle myLocationStyle;
private OnLocationChangedListener mListener;
private AMapLocationClient locationClient;
private AMapLocationClientOption clientOption;
public static FindFragment newInstance() {
FindFragment fragment = new FindFragment();
return fragment;
}
public FindFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_find, container, false);
initview(savedInstanceState,view);
initlistener();
return view;
}
private void initview( Bundle savedInstanceState,View view){
mapView= (MapView) view.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
if (aMap==null)
{
aMap=mapView.getMap();
}
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类
aMap.setMyLocationStyle(myLocationStyle);
aMap.getUiSettings().setMyLocationButtonEnabled(true);
aMap.setLocationSource(this);
aMap.setMyLocationEnabled(true);
btn_mapchange=(ToggleButton) view.findViewById(R.id.btn_mapchange);
}
private void initlistener(){
btn_mapchange.setOnCheckedChangeListener(this);
}
/**
* 激活定位
*/
@Override
public void activate(OnLocationChangedListener listener) {
mListener=listener;
if(locationClient==null){
locationClient=new AMapLocationClient(getActivity());
clientOption=new AMapLocationClientOption();
locationClient.setLocationListener(this);
clientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//高精度定位
clientOption.setOnceLocationLatest(true);//设置单次精确定位
locationClient.setLocationOption(clientOption);
locationClient.startLocation();
}
}
/**
* 停止定位
*/
@Override
public void deactivate() {
mListener=null;
if(locationClient!=null){
locationClient.stopLocation();
locationClient.onDestroy();
}
locationClient=null;
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (mListener != null&&aMapLocation != null) {
if (aMapLocation != null
&&aMapLocation.getErrorCode() == 0) {
mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点
} else {
String errText = "定位失败," + aMapLocation.getErrorCode()+ ": " + aMapLocation.getErrorInfo();
Log.e("AmapErr",errText);
}
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);
}
else {
aMap.setMapType(AMap.MAP_TYPE_NORMAL);
}
}
/**
* 必须重写以下方法
*/
@Override
public void onResume(){
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
if(locationClient!=null){
locationClient.onDestroy();
}
}
}
效果图