卜若的代码笔记-android开发的108个技巧-第7个技巧:高德地图SDK的接入

1.访问高德官网

1.1 访问

https://lbs.amap.com

1.2 注册登录进入控制台

1.3 添加应用 

1.4 添加key(点击加号)

 

 其中的SHA1请看第5个技巧

其中的PackageName请看第6个技巧

2. 环境配置

2.1 meta

进入Manifest.xml文件,配置meta-data

 <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="下图标红的key值"/>

 

2.2 权限

    <!--允许程序打开网络套接字-->
    <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" />

 2.3 下载包

因为是国内的,所以就不用下jar包了,直接通过compile下载吧!

        compile fileTree(dir: 'libs', include: ['*.jar'])
        //3D地图so及jar
        compile 'com.amap.api:3dmap:latest.integration'
        //定位功能
        compile 'com.amap.api:location:latest.integration'
        //搜索功能
        compile 'com.amap.api:search:latest.integration'
        //2D地图
        compile 'com.amap.api:map2d:latest.integration'

...

算了,我试了一下,别想了,直接下SDK吧

 https://lbs.amap.com/api/android-sdk/download/

 

 2.4 配置abi

splits {
            abi {
                enable true
                reset()
                //缺少什么CPU类型就添加对应的类型即可
                include 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a', 'mips', 'mips64'
                universalApk true
            }
            
        }

 

 3 前端

<?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="wrap_content"
        android:layout_height="match_parent" />

    <CheckBox
        android:id="@+id/check_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:text="开启个性化地图"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:orientation="vertical">

        <Button
            android:id="@+id/basicmap"
            android:layout_width="65dp"
            android:layout_height="32dp"
            android:gravity="center"
            android:background="@color/colorWhite"
            android:textColor="@color/colorBlack1"
            android:textSize="12sp"
            android:text="标准地图"/>
        <Button
            android:id="@+id/rsmap"
            android:layout_width="65dp"
            android:layout_height="32dp"
            android:gravity="center"
            android:background="@color/colorWhite"
            android:textColor="@color/colorBlack1"
            android:textSize="12sp"
            android:text="卫星地图"/>
        <Button
            android:id="@+id/nightmap"
            android:layout_width="65dp"
            android:layout_height="32dp"
            android:background="@color/colorWhite"
            android:textColor="@color/colorBlack1"
            android:gravity="center"
            android:textSize="12sp"
            android:text="夜间模式"/>
        <Button
            android:id="@+id/navimap"
            android:layout_width="65dp"
            android:layout_height="32dp"
            android:background="@color/colorWhite"
            android:textColor="@color/colorBlack1"
            android:gravity="center"
            android:textSize="12sp"
            android:text="导航模式"/>
        <Button
            android:id="@+id/setLocation"
            android:layout_width="65dp"
            android:layout_height="32dp"
            android:background="@color/colorWhite"
            android:textColor="@color/colorBlack1"
            android:gravity="center"
            android:textSize="12sp"
            android:text="定位"/>

    </LinearLayout>
</RelativeLayout>

4 活动

package com.draw.depp.qkast;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;

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.MapView;
import com.amap.api.maps.model.CustomMapStyleOptions;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import custom_view.LSuperView;

public class GDMap extends AppCompatActivity implements View.OnClickListener {

    private MapView mapView;
    private AMap aMap;
    private Button basicmap;
    private Button rsmap;
    private Button nightmap;
    private Button navimap;

    private CheckBox mStyleCheckbox;


    private CustomMapStyleOptions mapStyleOptions = new CustomMapStyleOptions();

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gdmap);
        /*
         * 设置离线地图存储目录,在下载离线地图或初始化地图设置;
         * 使用过程中可自行设置, 若自行设置了离线地图存储的路径,
         * 则需要在离线地图下载和使用地图页面都进行路径设置
         * */
        //Demo中为了其他界面可以使用下载的离线地图,使用默认位置存储,屏蔽了自定义设置
        //  MapsInitializer.sdcardDir =OffLineMapUtils.getSdCacheDir(this);

        mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);// 此方法必须重写

        init();

    }

    /**
     * 初始化AMap对象
     */
    private void init() {
        if (aMap == null) {
            aMap = mapView.getMap();
        }
        setMapCustomStyleFile(this);
        basicmap = (Button)findViewById(R.id.basicmap);
        basicmap.setOnClickListener(this);
        rsmap = (Button)findViewById(R.id.rsmap);
        rsmap.setOnClickListener(this);
        nightmap = (Button)findViewById(R.id.nightmap);
        nightmap.setOnClickListener(this);
        navimap = (Button)findViewById(R.id.navimap);
        navimap.setOnClickListener(this);

        mStyleCheckbox = (CheckBox) findViewById(R.id.check_style);

        mStyleCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(mapStyleOptions != null) {
                    // 设置自定义样式
                    mapStyleOptions.setEnable(b);
//					mapStyleOptions.setStyleId("your id");
                    aMap.setCustomMapStyle(mapStyleOptions);
                }
            }
        });

    }

    private void setMapCustomStyleFile(Context context) {
        String styleName = "style_new.data";
        InputStream inputStream = null;
        try {
            inputStream = context.getAssets().open(styleName);
            byte[] b = new byte[inputStream.available()];
            inputStream.read(b);

            if(mapStyleOptions != null) {
                // 设置自定义样式
                mapStyleOptions.setStyleData(b);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.basicmap:
                aMap.setMapType(AMap.MAP_TYPE_NORMAL);// 矢量地图模式
                break;
            case R.id.rsmap:
                aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 卫星地图模式
                break;
            case R.id.nightmap:
                aMap.setMapType(AMap.MAP_TYPE_NIGHT);//夜景地图模式
                break;
            case R.id.navimap:
                aMap.setMapType(AMap.MAP_TYPE_NAVI);//导航地图模式
                break;
        }

        mStyleCheckbox.setChecked(false);

    }


}

(前后端来自于高德源码,仅做学习,别告我...)

发布了202 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37080133/article/details/103063883