目录

前言

一、要求

二、申请AK密钥

三、关键代码分析

四、全部代码

五、结果


前言

这个项目是老早时候做的了,今天突然想写博客记录一下。首先需要安装配置好Java开发环境,并选择任意一款Android开发工具进行编程,推荐下载安装Android Studio软件进行程序开发。在开始进行Android编程开发之前需要对Java基础知识有一定的了解和掌握。在开始之前,记得导入定位及地图的相关jar包,Android Studio用gradle管理依赖(当然maven仓库也是管理依赖的一个比较好的工具)。

一、要求

结合百度地图开放平台:百度地图开放平台 | 百度地图API SDK | 地图开发或者高德地图开放平台:高德开放平台 | 高德地图API实现Android地图开发功能小案例,需求如下(以百度地图开放平台开发为例):

1、通过添加View控件显示地图,能够显示出地图的默认位置、地图名称等信息。

2、实现切换地图类型的功能,对于地图SDK提供了3种主要的地图类型,即普通地图、卫星图和空白地图。用户通过点击对应的按钮,能够实现不同类型地图之间的相互切换功能。

二、申请AK密钥

1、首先找到一个地图开放平台,这里以百度地图开放平台为例,步骤如下:进入百度地图开放平台,拉到最底下,进行登录注册,然后进入应用管理,点击创建应用。

2、输入应用名称,可以自己随意编辑,比如输入:地图,然后选择应用类型:Android SDK。启用服务不用管,系统默认的就行,输入发布版的SHA1密钥。

3、获取SHA1密钥 。

(1) 运行进入控制台:运行 -> 输入cmd -> 确定

(2)在控制台内,定位到.android文件夹,输入cd .android

(3)输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android,如有申请过可以直接回车)

(4)最后输入你应用的包名,然后点击“提交”完成应用的配置工作,就会得到一个创建的AK密钥。

三、关键代码分析

1、首先获取各种权限,包括网络权限等,在AndroidManifest.xml中配置

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_SETTINGS"tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.READ_PHONE_STATE"/>

2、添加开发秘钥apikey,需要去百度地图开放平台申请,见步骤二

<meta-data android:name="com.baidu.lbsapi.API_KEY"android:value="你的秘钥"/>

3、初始化及获取地图控件引用 ,在使用SDK各组件之前初始化context信息,传入ApplicationContext,注意该方法要在setContentView方法之前实现

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContextSDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);//获取地图控件引用myMap = (MapView) findViewById(R.id.bmapView);mBaiduMap=myMap.getMap();Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);}

4、用分支语句实现地图样式的切换

public void setMapMode(View view) {boolean checked = ((RadioButton) view).isChecked();switch (view.getId()) {case R.id.normal:if (checked) {mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);}break;case R.id.statellite:if (checked) {mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);}break;case R.id.blank:if (checked) {mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);}break;default:break;}}

5、地图生命周期的管理

onResume():是在启动activity启动之后才能执行的,也就是恢复执行。

onPause():当Activity进入后台并且该Activity并未被销毁时,该方法会被调用。

onDestroy():生命周期的销毁操作。

@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行myMap.onResume(),实现地图生命周期管理myMap.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行myMap.onPause(),实现地图生命周期管理myMap.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行myMap.onDestroy(),实现地图生命周期管理myMap.onDestroy();}

四、全部代码

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"tools:context="com.android.mybd.MainActivity"><android.support.design.widget.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/AppTheme.AppBarOverlay"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="#000"app:popupTheme="@style/AppTheme.PopupOverlay"app:titleTextColor="#FDFCFC"/></android.support.design.widget.AppBarLayout><include layout="@layout/content_main" /></android.support.design.widget.CoordinatorLayout>

content_main.xml: 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"tools:context="com.android.mybd.MainActivity"tools:showIn="@layout/activity_main"><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><RadioGroupandroid:id="@+id/RadioGroup"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="2"android:background="#2E2A2A"android:orientation="horizontal"><RadioButtonandroid:id="@+id/normal"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="true"android:onClick="setMapMode"android:text="普通图"android:layout_marginLeft="5dp"android:textColor="#FFF"tools:ignore="OnClick" /><RadioButtonandroid:id="@+id/statellite"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:onClick="setMapMode"android:text="卫星图"android:textColor="#FFF"tools:ignore="OnClick" /><RadioButtonandroid:id="@+id/blank"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:onClick="setMapMode"android:text="空白地图"android:textColor="#FFF"tools:ignore="OnClick" /></RadioGroup><Buttonandroid:id="@+id/btn_01"android:layout_width="80dp"android:layout_height="match_parent"android:background="#131313"android:gravity="center"android:text="清除缓存"android:textColor="#FFF" /></LinearLayout>
</RelativeLayout>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.android.mybd"><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_SETTINGS"tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.READ_PHONE_STATE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><meta-data android:name="com.baidu.lbsapi.API_KEY"android:value="秘钥"/><activityandroid:name=".MainActivity"android:label="@string/app_name"android:theme="@style/Theme.AppCompat.Light.NoActionBar"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

 MainActivity.java:

package com.android.mybd;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.RadioButton;import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;public class MainActivity extends AppCompatActivity  {private MapView myMap = null;private BaiduMap mBaiduMap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContext SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);//获取地图控件引用myMap = (MapView) findViewById(R.id.bmapView);mBaiduMap=myMap.getMap();Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行myMap.onResume(),实现地图生命周期管理myMap.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行myMap.onPause(),实现地图生命周期管理myMap.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行myMap.onDestroy(),实现地图生命周期管理myMap.onDestroy();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}public void setMapMode(View view) {boolean checked = ((RadioButton) view).isChecked();switch (view.getId()) {case R.id.normal:if (checked) {mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);}break;case R.id.statellite:if (checked) {mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);}break;case R.id.blank:if (checked) {mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);}break;default:break;}}}

五、结果

1、主界面图,默认勾选普通图:

2、卫星图展示:

3、空白地图展示:

Android实战开发--三种地图类型的设计相关推荐

  1. springboot整合elasticJob实战(纯代码开发三种任务类型用法)以及分片系统,事件追踪详解...

    一 springboot整合 介绍就不多说了,只有这个框架是当当网开源的,支持分布式调度,分布式系统中非常合适(两个服务同时跑不会重复,并且可灵活配置分开分批处理数据,贼方便)! 这里主要还是用到zo ...

  2. Android Map 开发之高德地图

    android Map 开发之google Map 可参考文档    链接 本文总结的是Android Map 开发之高德地图,以下是详细代码及注释: 如何把 API 添加到我的Android 工程中 ...

  3. Android实战开发——引导页面(ViewPager)篇

    Android实战开发之引导页面 文章目录 Android实战开发之引导页面 前言 一.概述 二.操作步骤 1.操作准备 2.初始化 3.适配器设置 3.圆点的滑动事件 三.总结 前言 本篇文章主要介 ...

  4. Project中三种任务类型解释

    概述 Project--文件---选项---日程里,有"默认任务类型"设置 三种任务类型,与资源结合起来后,就需要根据实际情况选择了. 固定单位 这是Project默认的任务类型. ...

  5. 计算机屏幕三种,多屏互动的三种表现类型

    原标题:多屏互动的三种表现类型 多屏互动是我们日常工作中越来越多被用到的屏幕互动方式.许多的无线设备可以让我们的智能终端的屏幕内容进行投屏互动,但是不同的互动方式,其无线交互的工作方式也有所不同.在本 ...

  6. Android系统的三种分屏显示模式

    Google在Android 7.0中引入了一个新特性--多窗口支持,允许用户一次在屏幕上打开两个应用.在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示.在电视设备 ...

  7. Android 蓝牙开发(三) -- 低功耗蓝牙开发

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 前面已经学习了经典蓝牙开发,学习了蓝牙的配对连接和通信,又通 ...

  8. PL/SQL三种集合类型的比较

    PL/SQL三种集合类型的比较<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  9. SEO三种职位类型:编辑型SEO、技术型SEO、营销型SEO详解

    SEO三种职位类型:编辑型SEO.技术型SEO.营销型SEO详解 网站SEO优化作为营销端的服务之一,这些年也呈现出日新月异的格局.一改过去游兵散将式的小作坊生产模式,不断有力量强大的公司团体加入到这 ...

  10. Typescript常见三种函数类型

    Typescript有常见三种函数类型: 分别是普通的函数: 有可选参数的函数: 有剩余参数的函数: 普通函数 function findMan(age:number):string{return ' ...

最新文章

  1. UE中的几个极有用功能
  2. Spark的transformation和action算子简介
  3. R语言编程艺术(1)快速入门
  4. python tornado websocket_python tornado websocket 多聊天室(返回消息给部分连接者)
  5. 打造属于自己的图文符号库
  6. rqnoj 496 [IOI1999]花店橱窗布置 (简单dp)
  7. 【转】分享:c#和javascript函数的相互调用(ObjectForScripting 的类必须对 COM 可见。请确认该对象是公共的,或考虑向您的类添加 ComVisible 属性。)...
  8. iphone主屏幕动态壁纸_灵动优美的iphone高清动态锁屏壁纸
  9. 危险的转变:Python正在从简明转向臃肿,从实用转向媚俗
  10. EventBus HandlerPoster简单分析
  11. 关于文件的MIME类型
  12. ASM文件类型和模板
  13. freemarker制作word模板
  14. Android开发:如何实现收发短信
  15. 2022年下半年软考网络规划设计师下午真题及答案解析
  16. 基于Python实现的实时聊天系统
  17. 《数据库概论》实验(6):交互式SQL--视图与授权
  18. MPEG-2压缩编码技术原理应用
  19. 慕课网 前端JS面试技巧 笔记
  20. 基于stm32f103c8t6与手机蓝牙控制LED

热门文章

  1. 数据库第四次作业:数据备份与还原
  2. SQL数据库基础知识复习
  3. GNSS静态测量数据采集与内业解算
  4. SVN安装-Subversive Plug-In 和Subversive SVN Connectors
  5. 2021-07-01本科毕业设计需要查重什么?
  6. 二进制文件(.bin)查看
  7. 三星530换固态硬盘_也许是目前性价比最高的固态硬盘!三星870 QVO快速体验
  8. 02. Win32 API简介
  9. Server 安装 caffee
  10. rgba与十六进制的相互转换,以及rgba的校验