赞
踩
1.Android Studio中找到密匙数字证书(MD5和SHA1)
2.Android Studio中配置高德地图Android地图SDK
3.Android Studio中实现高德地图的使用【标记,以标记为中心显示地图,app中调用高德地图进行导航】
4.Android Studio打包relase版APK时(签名),需在配置地图中使用签名文件(.jks)的SHA1。
要领:
一、找数字证书步骤:
1.点Android Studio右侧的gradle
2.点击栏目上的刷新图标
3.点击":app" → “Tasks” → “android” → “signingReport”
二、Android studio中配置高德地图的Android地图SDK
步骤如下:【这里只用了3D地图】
1.下载高德地图Android地图SDK(去高德官方下载)
2.解压后得到下图中的1个文件夹和1个jar文件
3.将jar文件复制到项目app下的libs(作为libs的下一级文件)
4.在src下面的main目录上右键new → Directory → 起名为“jniLibs”【必须这么取名】,之后将解压得到的armeabi整个复制到jniLibs下,层级结构见下图:
高德地图的简单使用【第三方app调出高德地图进行导航】
- <span style="font-size:14px;">import android.app.AlertDialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.text.TextUtils;
- import android.util.Log;
- import android.view.animation.Animation;
- import android.view.animation.LinearInterpolator;
- import android.view.animation.RotateAnimation;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.widget.Toast;
-
- import com.amap.api.maps.AMap;
- import com.amap.api.maps.AMapOptions;
- import com.amap.api.maps.CameraUpdate;
- import com.amap.api.maps.CameraUpdateFactory;
- import com.amap.api.maps.LocationSource;
- import com.amap.api.maps.MapView;
- import com.amap.api.maps.UiSettings;
- import com.amap.api.maps.model.BitmapDescriptorFactory;
- import com.amap.api.maps.model.CameraPosition;
- import com.amap.api.maps.model.Circle;
- import com.amap.api.maps.model.CircleOptions;
- import com.amap.api.maps.model.LatLng;
- import com.amap.api.maps.model.Marker;
- import com.amap.api.maps.model.MarkerOptions;
-
- import java.io.File;
-
- import butterknife.BindView;
- import butterknife.ButterKnife;
- import butterknife.OnClick;
-
- import static android.R.id.progress;
-
- /**
- * 获取地址对应的(纬度,经度)
- * 【地址转坐标】
- * 以标记点为中心显示地图
- * 点击标记点弹出提示框【确认进入手机地图进行导航】
- */
- public class LocalInfoActivity extends AppCompatActivity {
- @BindView(R.id.et_localinfo)
- EditText etLocalinfo;
- @BindView(R.id.tv_localinfo)
- TextView tvLocalinfo;
- private MapView mMapView = null;
- private UiSettings uiSettings;//用于设置地图显示信息
- private AMap aMap;//定义一个地图对象
- private LatLng latLng;//地图坐标点(纬度,经度)
- private Marker marker;//地图标记
- private MarkerOptions markerOptions;//标记配置
-
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_local_info);
- ButterKnife.bind(this);
- showMap(savedInstanceState);//显示地图
- initMapOptions();//配置地图信息
- showMapFromLatlang();//以新的坐标点为中心显示地图
- addAMark();//添加坐标对应标记【添加标记点击事件】
- drawACircle();//绘制一个圆饼
- }
-
- /**
- * 显示出地图
- */
- private void showMap(Bundle savedInstanceState) {
- //获取地图控件引用
- mMapView = (MapView) findViewById(R.id.map_localinfo);
- //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
- mMapView.onCreate(savedInstanceState);//到这里地图就可以显示出来【需实现生命周期的管理如下生命周期】
- }
-
- /**
- * 配置地图信息
- * “+ -”号是否可用【是否显示】
- * 指南针是否显示
- * 默认定位按钮
- * 缩放比例和高德地图Logo
- * 旋转手势不可用
- * 设置定位监听
- */
- private void initMapOptions() {
- latLng = new LatLng(30.670000,104.060000);//实例化地图坐标点
- aMap = mMapView.getMap();
- uiSettings = aMap.getUiSettings();
- uiSettings.setScaleControlsEnabled(true);//显示比例尺控件
- uiSettings.setZoomControlsEnabled(true);//设施“+ -”是否可以用来控制地图放大倍数
- uiSettings.setCompassEnabled(true);//控制指南针是否显示
- uiSettings.setMyLocationButtonEnabled(true); // 显示默认的定位按钮
- uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);//设置logo位置【左下角】
- uiSettings.setRotateGesturesEnabled(false);//设置旋转手势——不能通过手势来旋转地图
- // /**
- // * 定位监听,这里没用到
- // */
- // aMap.setLocationSource(new LocationSource() {//设置定位监听
- // @Override
- // public void activate(OnLocationChangedListener onLocationChangedListener) {
- // }
- // @Override
- // public void deactivate() {
- // }
- // });// 设置定位监听
- // aMap.setMyLocationEnabled(true);// 可触发定位并显示定位层
- }
- /**
- * 设置新的中心点
- * 新的缩放级别【aMap.moveCamera(CameraUpdateFactory.zoomTo(17));//将地图的缩放级别调整到17级】
- */
- private void showMapFromLatlang() {
- CameraUpdate cameraupdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(
- latLng,//新的中心点坐标
- 16, //新的缩放级别
- 30, //俯仰角0°~45°(垂直与地图时为0)
- 0 偏航角 0~360° (正北方为0)
- ));
- aMap.moveCamera(cameraupdate);//将显示地图移动到新的中心点来显示
- }
-
- /**
- * 在一个坐标上添加标记<span style="white-space:pre"> </span>//清除标记点用aMap.clear()
- */
- private void addAMark() {
- markerOptions = new MarkerOptions();
- markerOptions.position(latLng);//设置纬度,经度
- markerOptions.title("成都");//标题
- markerOptions.draggable(true);//标记可拖动【拖动失败】
- markerOptions.visible(true);//点标记是否可见
- markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_nomal));//设置标记图标
- marker = aMap.addMarker(markerOptions); //获得标记对象(需要使用aMap将标记配置添加到地图后才能生成对应的标记对象)
- marker.setRotateAngle(0);//设置倾斜度数(0-360[正负])
- /**
- * 添加标注点击事件【弹出框确认后进入高德地图导航】
- */
- aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
- @Override
- public boolean onMarkerClick(Marker marker) {
- AlertDialog dialog = new AlertDialog.Builder(LocalInfoActivity.this)
- .setTitle("系统提示")
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //判断是否已安装高德地图app
- if(isInstallByRead("com.autonavi.minimap")){
- //下方传入的坐标值需改为你想要去的地方的坐标
- goToNaviActivity(LocalInfoActivity.this,"test",null,"30.670000","104.060000","1","2");
- }else{
- Toast.makeText(LocalInfoActivity.this,"请先安装高德地图app",Toast.LENGTH_SHORT).show();
- }
- }
- })
- .setNegativeButton("取消",null)
- .setMessage("是否启动高德地图进行导航?")
- .show();
- return true;
- }
- });
- }
-
- /**
- * 以坐标点为中心画一个圆饼
- */
- private void drawACircle() {
- aMap.addCircle(new CircleOptions().
- center(latLng).
- radius(200).//范围200米
- fillColor(Color.argb(progress, 1, 1, 1))//填充色
- .strokeColor(Color.argb(progress, 1, 1, 1))//边框色
- .strokeWidth(15));
- }
-
- @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);
- }
-
- @OnClick(R.id.btn_localinfo)
- public void onClick() {
-
- }
-
- /**
- * 配置导航的信息【调用手机已安装的高德地图】
- * @param context
- * @param sourceApplication 必填 第三方调用应用名称。如 amap
- * @param poiname
- * @param lat 必填 纬度
- * @param lon 必填 经度
- * @param dev 必填 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
- * @param style 必填 导航方式(0 速度快; 1 费用少; 2 路程短; 3 不走高速;4 躲避拥堵;5 不走高速且避免收费;6 不走高速且躲避拥堵;7 躲避收费和拥堵;8 不走高速躲避收费和拥堵))
- */
- public static void goToNaviActivity(Context context, String sourceApplication , String poiname , String lat , String lon , String dev , String style){
- StringBuffer stringBuffer = new StringBuffer("androidamap://navi?sourceApplication=")
- .append(sourceApplication);
- if (!TextUtils.isEmpty(poiname)){
- stringBuffer.append("&poiname=").append(poiname);
- }
- stringBuffer.append("&lat=").append(lat)
- .append("&lon=").append(lon)
- .append("&dev=").append(dev)
- .append("&style=").append(style);
-
- Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));
- intent.setPackage("com.autonavi.minimap");
- context.startActivity(intent);
- }
-
- /**
- * 根据包名检测某个APP是否安装
- *
- * @param packageName 包名
- * @return true 安装 false 没有安装
- */
- public static boolean isInstallByRead(String packageName) {
- return new File("/data/data/" + packageName).exists();
- }
- }</span><span style="font-size: 24px;">
- </span>

高德地图定位:【注意权限】
配置服务:
<service android:name="com.amap.api.location.APSService"></service>
配置定位:
//定位【获取当前位置坐标(纬度,经度)】 private void getLoacation() { mlocationClient = new AMapLocationClient(this); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位监听 mlocationClient.setLocationListener(this); //设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位间隔,单位毫秒,默认为2000ms mLocationOption.setInterval(2000); //设置定位参数 mlocationClient.setLocationOption(mLocationOption); Log.e("---------","定位中..."); //启动定位 mlocationClient.startLocation(); } //定位监听 @Override public void onLocationChanged(AMapLocation amapLocation) { Log.e("------","定位成功"); if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { //定位成功回调信息,设置相关消息 amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 double lat = amapLocation.getLatitude();//获取纬度 double lon = amapLocation.getLongitude();//获取经度 Log.e("------","("+lat+":"+lon+")"); amapLocation.getAccuracy();//获取精度信息 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(amapLocation.getTime()); df.format(date);//定位时间 } else { //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e("------AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); } } }
调用百度地图进行导航:
- /**
- * 调用百度地图导航
- * 使用百度地图导航需注意:需要传入出发点的名字|坐标
- */
- public void goToBaiduMap(Context context) {
- /**
- * 查看下面网址有详细的使用说明
- * http://developer.baidu.com/map/uri-intro.htm#idmykey37
- */
- //调起百度PC或Web地图,展示“西安市”从(lat:34.264642646862,lng:108.95108518068 )“我家”到“大雁塔”的驾车路线。
- String gole = "intent://map/direction?" +
- "origin=latlng:30.670000,104.060000|name:我的坐标" +//传入自己的坐标【这里是模拟坐标】name属性不要好像会不开启导航
- "&destination=天府广场" + //目的地名称
- "&mode=driving®ion=成都市" + //所在城市
- "&referer=Autohome" + //
- "|GasStation#Intent;" + //
- "scheme=bdapp;" + //固定为bdapp
- "package=com.baidu.BaiduMap;" + //百度包
- "end";//结束标志
- try {
- Intent intent = Intent.getIntent(gole);
- context.startActivity(intent);
- } catch (URISyntaxException e) {
- e.printStackTrace();
- }
- }

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:id="@+id/activity_local_info"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.liu.ditu.LocalInfoActivity">
- <com.amap.api.maps.MapView
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/map_localinfo"
- ></com.amap.api.maps.MapView>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <EditText
- android:layout_width="wrap_content"
- android:layout_height="50dp"
- android:layout_weight="1"
- android:textSize="20sp"
- android:layout_marginLeft="50dp"
- android:layout_gravity="center_vertical"
- android:id="@+id/et_localinfo"/>
- <Button
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:id="@+id/btn_localinfo"
- android:layout_gravity="center_vertical"
- android:text="提交"
- />
- </LinearLayout>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:layout_marginTop="5dp"
- android:textSize="18sp"
- android:id="@+id/tv_localinfo"
- />
- </LinearLayout>
- </RelativeLayout>

地图效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。