效果图:
其中第二张图是官网默认的,后面有讲解如何自己定义界面。
STEP1:
先去高德开放平台注册账号,网址:http://lbs.amap.com/
之后再去控制台-应用管理找到自己的key,如下图所示
STEP2:集成前的准备
1、引入依赖, 项目build.gradle中加入:
//定位
compile ‘com.amap.api:location:latest.integration’
//地图
compile ‘com.amap.api:3dmap:latest.integration’
2、资源下载网址:http://lbs.amap.com/api/android-sdk/download
解压后将相应jar架包放入项目libs目录下(注意jar右键Add As Librarys ),同时新建jinLibs将so库放入(注意新建文件夹与java平级,也可一并放入libs目录下),官网的jar完整包名AMap3DMap_5.7.0_AMapNavi_5.6.0_20180109 -官网完整包名(改名方法:右键Refactor-Rename 文件类名更改也如此 )
STEP3:AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.helloworld.mapdemo">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<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>
<!--高德自带离线UI界面-->
<activity
android:name="com.amap.api.maps.offlinemap.OfflineMapActivity"
android:screenOrientation="portrait" />
<!-- 高德地图 -->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="a6ed68efeb86d67491a065309cc4f4d6" /><!--换上你自己的App Key-->
<service android:name="com.amap.api.location.APSService" />
<!--自定义离线UI界面-->
<activity android:name=".OfflineMapMyActivity"/>
</application>
</manifest>
STEP4: LocationUtils 相关基本配置
package com.helloworld.mapdemo;
import android.content.Context;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
public class LocationUtils {
/**
* 初始化定位
*/
public static AMapLocationClient initLocation(Context context, AMapLocationClientOption locationOption, AMapLocationListener locationListener) {
//初始化client
AMapLocationClient locationClient = new AMapLocationClient(context.getApplicationContext());
//设置定位参数
locationClient.setLocationOption(locationOption);
// 设置定位监听
locationClient.setLocationListener(locationListener);
return locationClient;
}
/**
* 定位参数
*/
public static AMapLocationClientOption getDefaultOption() {
AMapLocationClientOption mOption = new AMapLocationClientOption();
//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
mOption.setGpsFirst(false);
//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
mOption.setHttpTimeOut(25000);
//可选,设置定位间隔。默认为2秒
mOption.setInterval(2000);
//可选,设置是否返回逆地理地址信息。默认是true
mOption.setNeedAddress(true);
//可选,设置是否单次定位。默认是false
mOption.setOnceLocation(false);
//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用
mOption.setOnceLocationLatest(false);
//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);
//可选,设置是否使用传感器。默认是false
mOption.setSensorEnable(false);
//可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,
//停止以后完全依赖于系统刷新,定位位置可能存在误差
mOption.setWifiScan(true);
//可选,设置是否使用缓存定位,默认为true
mOption.setLocationCacheEnable(true);
return mOption;
}
}
STEP 5:权限类
package com.helloworld.mapdemo;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
/**
* 高德定位相关权限类
*/
public class PermissionsUtils {
/**
* 需要进行检测的定位权限数组
*/
public static String[] locationPermissions = {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE
};
private PermissionsUtils() {
}
public static boolean checkPermissions(Activity activity, int requestcode, String... permissions) {
List<String> needRequestPermissonList = findDeniedPermissions(permissions, activity);
if (null != needRequestPermissonList && needRequestPermissonList.size() > 0) {
ActivityCompat.requestPermissions(activity, needRequestPermissonList.toArray(
new String[needRequestPermissonList.size()]), requestcode);
return false;
} else {
return true;
}
}
private static List<String> findDeniedPermissions(String[] permissions, Activity activity) {
List<String> needRequestPermissonList = new ArrayList<>();
for (String perm : permissions) {
if (ContextCompat.checkSelfPermission(activity,
perm) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.shouldShowRequestPermissionRationale(
activity, perm)) {
needRequestPermissonList.add(perm);
}
}
return needRequestPermissonList;
}
public static boolean verifyPermissions(int[] grantResults) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
}
STEP:6 MainActivity :
http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation (参数返回文档地址)
package com.helloworld.mapdemo;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
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.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.maps.offlinemap.OfflineMapActivity;
public class MainActivity extends AppCompatActivity implements AMapLocationListener, View.OnClickListener {
private static final int PERMISSON_REQUESTCODE = 0;
private MapView mMapView;
private AMap aMap;
//判断权限是否打开
private boolean isNeedCheck = true;
private static final String TAG = "MapLocationActivity";
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明AMapLocationClientOption对象
public AMapLocationClientOption mLocationOption = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.map_one).setOnClickListener(this);
findViewById(R.id.map_two).setOnClickListener(this);
findViewById(R.id.map_three).setOnClickListener(this);
findViewById(R.id.map_four).setOnClickListener(this);
findViewById(R.id.map_five).setOnClickListener(this);
mMapView = (MapView) this.findViewById(R.id.map);
// 此方法须重写,虚拟机需要在很多情况下保存地图绘制的当前状态
mMapView.onCreate(savedInstanceState);
initLocation();
}
private void initLocation() {
if (aMap == null) {
aMap = mMapView.getMap();
}
//缩放级别3 -19,不支持自定义 要监听否则无效
aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
@Override
public void onMapLoaded() {
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
}
});
//指南针
aMap.getUiSettings().setCompassEnabled(true);
//显示默认的定位按钮
aMap.getUiSettings().setMyLocationButtonEnabled(true);
//显示实时交通状况
//aMap.setTrafficEnabled(true);
//地图模式:导航地图:MAP_TYPE_NAVI、夜景地图:MAP_TYPE_NIGHT、
//白昼地图(即普通地图):MAP_TYPE_NORMAL、卫星地图:MAP_TYPE_SATELLITE
//aMap.setMapType(AMap.MAP_TYPE_NORMAL);
//缩放级别≥17级时,地图上可以显示室内地图。(true:显示室内地图;false:不显示)
//缩放级别≥18级时,不仅可以看到室内地图效果,还允许操作切换楼层,显示精细化室内地图
aMap.showIndoorMap(true);
initLocationStyle();
//动态设置权限
if (isNeedCheck) {
if (PermissionsUtils.checkPermissions(this, PERMISSON_REQUESTCODE, PermissionsUtils.locationPermissions)) {
initaion();
}
} else {
initaion();
}
}
private void initaion() {
//基本的定位参数
mLocationOption = LocationUtils.getDefaultOption();
mLocationClient = LocationUtils.initLocation(this, mLocationOption, this);
//启动定位
mLocationClient.startLocation();
}
private void initLocationStyle() {
//实现定位蓝点
//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
//如果不设置myLocationType,默认也会执行此种模式。
MyLocationStyle myLocationStyle = new MyLocationStyle();
//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
aMap.setMyLocationEnabled(true);
//自定义小蓝点的图标(不设置则使用默认蓝点图标)
myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher));
//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
//单位:毫秒,默认值:1000毫秒,如果传小于1000的任何值将按照1000计算。
myLocationStyle.interval(2000);
//只定位一次。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);
//定位一次,且将视角移动到地图中心点。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);
//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;
//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);
//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
//以下三种模式从5.1.0版本开始提供
//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
//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);
//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数。
//myLocationStyle.myLocationIcon(R.mipmap.ic_launcher);
//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
//myLocationStyle.showMyLocation(true);
//设置定位蓝点精度圆圈的边框颜色的方法。(注意不要使用R.color)
myLocationStyle.strokeColor(Color.parseColor("#FF0000"));//红色
//设置定位蓝点精度圆圈的填充颜色的方法。
myLocationStyle.radiusFillColor(Color.parseColor("#55000000"));//半透明
//设置定位蓝点精度圈的边框宽度的方法。
myLocationStyle.strokeWidth(10f);
//设置定位蓝点的Style
aMap.setMyLocationStyle(myLocationStyle);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSON_REQUESTCODE) {
if (!PermissionsUtils.verifyPermissions(grantResults)) {
//没打开权限 跳转至设置界面
Tools.startAppSettings(this);
isNeedCheck = false;
} else {
initLocation();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
//销毁地图
if (mMapView != null) {
mMapView.onDestroy();
}
}
@Override
public void onResume() {
super.onResume();
//重新绘制加载地图
if (mMapView != null) {
mMapView.onResume();
}
}
@Override
public void onPause() {
super.onPause();
//暂停地图的绘制
if (mMapView != null) {
mMapView.onPause();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mMapView != null) {
mMapView.onSaveInstanceState(outState);
}
}
private String cityName, AdCode, cityCode, province, poiName, street, district;
private double latitude, longitude;
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (amapLocation.getErrorCode() == 0) {
//更多返回看(文档:http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation)
latitude = amapLocation.getLatitude();//获取纬度
longitude = amapLocation.getLongitude();//获取经度
province = amapLocation.getProvince();//省信息
cityName = amapLocation.getCity();//城市信息
district = amapLocation.getDistrict();//城区信息
street = amapLocation.getStreet();//街道信息
cityCode = amapLocation.getCityCode();//城市编码
AdCode = amapLocation.getAdCode();//地区编码
poiName = amapLocation.getPoiName();//获取当前位置的POI名称
Log.e(TAG, "onLocationChanged: " + cityName);
Log.e(TAG, "onLocationChanged: " + AdCode);
Log.e(TAG, "onLocationChanged: " + cityCode);
Log.e(TAG, "onLocationChanged: " + province);
Log.e(TAG, "onLocationChanged: " + poiName);
Log.e(TAG, "onLocationChanged: " + latitude);
Log.e(TAG, "onLocationChanged: " + street);
Log.e(TAG, "onLocationChanged: " + longitude);
Log.e(TAG, "onLocationChanged: " + district);
Log.e(TAG, "onLocationChanged: " + amapLocation.getAddress());
Log.e(TAG, "onLocationChanged: " + amapLocation.getStreetNum());
Log.e(TAG, "onLocationChanged: " + amapLocation.getLocationType());
Log.e(TAG, "onLocationChanged: " + amapLocation.getLocationDetail());
//停止定位后,本地定位服务并不会被销毁
mLocationClient.stopLocation();
//销毁定位客户端,同时销毁本地定位服务。
mLocationClient.onDestroy();
} else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e(TAG, "定位失败, 错误码:"
+ amapLocation.getErrorCode() + "\n"
+ " 错误信息:"
+ amapLocation.getErrorInfo() + "\n"
+ "APK SHA1值为:" + Tools.getSHA1(this));
String str = amapLocation.getErrorInfo();
String[] split = str.split(" ");
//截取第一个空格之前的错误日志
Toast.makeText(this, split[0], Toast.LENGTH_SHORT).show();
//停止定位后,本地定位服务并不会被销毁
mLocationClient.stopLocation();
//销毁定位客户端,同时销毁本地定位服务。
mLocationClient.onDestroy();
}
}
//地图模式:导航地图:MAP_TYPE_NAVI、夜景地图:MAP_TYPE_NIGHT、
//白昼地图(即普通地图):MAP_TYPE_NORMAL、卫星地图:MAP_TYPE_SATELLITE
//aMap.setMapType(AMap.MAP_TYPE_NORMAL)----(默认普通地图)
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.map_one:
aMap.setMapType(AMap.MAP_TYPE_NAVI);
break;
case R.id.map_two:
aMap.setMapType(AMap.MAP_TYPE_NIGHT);
break;
case R.id.map_three:
aMap.setMapType(AMap.MAP_TYPE_NORMAL);
break;
case R.id.map_four:
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);
break;
case R.id.map_five:
//高德自带离线地图UI组件
startActivity(new Intent(this, OfflineMapActivity.class));
//自定义离线地图UI组件
//startActivity(new Intent(this, OfflineMapMyActivity.class));
break;
}
}
}
布局文件: activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.helloworld.mapdemo.MainActivity">
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/map_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="导航地图" />
<Button
android:id="@+id/map_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="夜景地图" />
<Button
android:id="@+id/map_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="普通地图" />
<Button
android:id="@+id/map_four"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="卫星图" />
<Button
android:id="@+id/map_five"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="离线地图组件" />
</LinearLayout>
</RelativeLayout>
获取APK当前调试版的SHA1:
正式版的:
找到studio的Terminal 控制台 输入keytool -list -v -keystore debug.keystore 回车(其中debug.keystore换成jks签名文件路径)
例如:keytool -list -v -keystore D:\ASWorkspace\HelloWord.jks
STEP7: Tools 工具类
package com.helloworld.mapdemo;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Locale;
public class Tools {
/**
* 跳转至设置界面方法
*/
public static void startAppSettings(Context context) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + context.getPackageName()));
context.startActivity(intent);
}
/**
* 获取APK当前签名文件的SHA1
*/
public static String getSHA1(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(), PackageManager.GET_SIGNATURES);
byte[] cert = info.signatures[0].toByteArray();
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] publicKey = md.digest(cert);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < publicKey.length; i++) {
String appendString = Integer.toHexString(0xFF & publicKey[i])
.toUpperCase(Locale.US);
if (appendString.length() == 1)
hexString.append("0");
hexString.append(appendString);
hexString.append(":");
}
String result = hexString.toString();
return result.substring(0, result.length() - 1);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}
在创建应用前可填任意SHA1码,待通过Tools.getSHA1(this)方法获取后再更改
STEP8:自定义离线地图用法 OfflineMapMyActivity (布局文件是新建类默认的)
package com.helloworld.mapdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import com.alibaba.idst.nls.internal.utils.L;
import com.amap.api.maps.AMapException;
import com.amap.api.maps.offlinemap.OfflineMapManager;
import com.amap.api.maps.offlinemap.OfflineMapProvince;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义离线地图用法
*/
public class OfflineMapMyActivity extends AppCompatActivity implements OfflineMapManager.OfflineMapDownloadListener,OfflineMapManager.OfflineLoadedListener {
private List<OfflineMapProvince> list = new ArrayList<>();
private OfflineMapManager amapManager;
private static final String TAG = "OfflineMapMyActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_offline_map_my);
if (amapManager == null) {
//构造OfflineMapManager对象
amapManager = new OfflineMapManager(this, this);
amapManager.setOnOfflineLoadedListener(this);
}
try {
//按照citycode下载 (城市编码去官网下载即可)
//amapManager.downloadByCityCode("城市编码");
//按照cityname下载
//开始执行下载任务
amapManager.downloadByCityName("赣州市");
amapManager.downloadByCityName("深圳市");
//通过updateOfflineCityByName方法判断离线地图数据是否存在更新
//amapManager.updateOfflineCityByName("赣州市");
//城市编码
//amapManager.updateOfflineCityByCode("城市编码");
//删除某一城市的离线地图包
//注意:执行 remove 操作时,需要等待 OfflineLoadedListener 回调之后才可以,
//否则(即使OfflineMapDownloadListener回调成功)操作将会无效
//amapManager.remove("赣州市");
//http://lbs.amap.com/api/android-sdk/guide/create-map/offline-map
//获取省列表
amapManager.getOfflineMapProvinceList();
//获取城市列表
amapManager.getOfflineMapCityList();
//获取已下载城市列表
amapManager.getDownloadOfflineMapCityList();
//获取正在或等待下载城市列表
amapManager.getDownloadingCityList();
/**
* 用法
* 其实就是将它作为list数据源传入进去
*/
//将省份赋值给list
list = amapManager.getOfflineMapProvinceList();
//自行新建listView与Adapter
//listView.setAdapter(MyAdapter);
Log.e(TAG, "全国省份的大小: " + list.size());
//遍历全国省份的名称
for (int i = 0; i < list.size(); i++) {
Log.e(TAG, "省份的名称: " + list.get(i).getProvinceName());
Log.e(TAG, "省份的编码: " + list.get(i).getProvinceCode());
Log.e(TAG, "省份的拼音名称: " + list.get(i).getPinyin());
}
} catch (AMapException e) {
e.printStackTrace();
}
//暂停地图的下载
//amapManager.pause();
//停止所有当前正在执行的下载,包括下载队列中等待的部分
//amapManager.stop();
//离线地图默认会下载到手机存储卡的“amap”目录下,也可以自定义路径:
//通过 MapInitializer.sdcardDir 设置路径时,需要在 AMap 对象初始化之前进行,否则操作会无效
//MapsInitializer.sdcardDir="";
}
/**
* 下载任务中的回调
*
* @param i 状态码 0为成功 101:下载出错 4:下载完成(其他状态码暂无...)
* @param i1 下载的进度
* @param s 所下载的城市名
*/
@Override
public void onDownload(int i, int i1, String s) {
//这里可以加载进度条,(可自行添加)这个方法在下载时会实时回调
//注意不支持多个城市同时下载,会先执行开头下载的城市,在下载第二个城市
Log.e(TAG, "onDownload: " + i + "\n" + i1 + "\n" + s);
}
/**
* 检查城市是否有新的离线版本包
*
* @param b 是否有更新
* @param s 检查更新的城市名
*/
@Override
public void onCheckUpdate(boolean b, String s) {
//检查更新的回调 true+城市名
Log.e(TAG, "onCheckUpdate: " + b + "\n" + s);
}
@Override
public void onRemove(boolean b, String s, String s1) {
Log.e(TAG, "onRemove: " + b + "\n" + s + "\n" + s1);
}
@Override
public void onVerifyComplete() {
Log.e(TAG, "onVerifyComplete: ");
}
/**
* 自行实现
*/
private BaseAdapter MyAdapter = new BaseAdapter() {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//获取省的名字
//list.get(i).getProvinceName();
//获取省的编码
//list.get(i).getProvinceCode();
//获取该省的城市列表
//list.get(i).getCityList();
return null;
}
};
}
打印如下:
STEP8:如果定位失败可以到这个网址链接查看错误码说明:http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/ (其中定位失败原因代码中也有)
最后注意APP SHA1和包名要对应一致不要填错 否则会定位到 非洲去…