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开发 高德地图 定位当前位置 android studio高德地图_Android

二、Android studio中配置高德地图的Android地图SDK

步骤如下:【这里只用了3D地图】

1.下载高德地图Android地图SDK(去高德官方下载

android开发 高德地图 定位当前位置 android studio高德地图_android_02

2.解压后得到下图中的1个文件夹和1个jar文件

android开发 高德地图 定位当前位置 android studio高德地图_Android_03

3.将jar文件复制到项目app下的libs(作为libs的下一级文件)

4.在src下面的main目录上右键new → Directory → 起名为“jniLibs”【必须这么取名】,之后将解压得到的armeabi整个复制到jniLibs下,层级结构见下图:

android开发 高德地图 定位当前位置 android studio高德地图_android_04

android开发 高德地图 定位当前位置 android studio高德地图_android_05

高德地图的简单使用【第三方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>

地图效果:

android开发 高德地图 定位当前位置 android studio高德地图_Android_06