白馒头 發表於 2020-4-16 21:41:00

Android中应用百度地图API开发地图APP实例-显示百度地图

<h1>场景</h1>
<h2>效果</h2>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213809206-1192763897.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY</p>
<p>http://lbsyun.baidu.com/index.php</p>
<h2>申请API_KEY</h2>
<p>登录百度开放平台后找到控制台下的应用管理-创建应用</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213814083-483587890.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>依次输入应用名,应用类型选择Android SDK</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213820047-1835951690.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后下面需要输入发布版SHA1和包名</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213826759-1885025370.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<h2>获取应用SHA1</h2>
<p>首先来到.Android文件所在的位置,默认位置如下</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213902458-547961597.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<p>如果修改过就要到修改的路径下。</p>
<p>AndroidStudio修改默认C盘配置文件夹(.android.gradle.AndroidStudio)以及修改后避免踩的坑:</p>
<p>https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103791948</p>
<p>我这里是修改过,所以这里的路径是在D:\Android</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213907562-181594367.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<p>在此路径下打开命令行窗口。</p>
<p>这里采用使用JDK自带的keytool工具生成</p>
<p>keytool默认路径:C:\Program Files\Java\jdk1.8.0_181\bin</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213910663-1184766105.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后将keytool.exe拖到上面打开的.Android所在路径命令行窗口中,然后再后面输入</p>
<div class="cnblogs_code">
<pre>-list -v -keystore debug.keystore</pre>
</div>
<p>回车。然后提示输入密钥库命令,直接回车</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213928035-1822370747.jpg" alt=""></p>
<p><img alt=""></p>
<p>然后就可以在证书指纹中获取SHA1</p>
<p><img alt=""></p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213933156-2000491588.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后再回到百度开放平台点击提交。就可以获取开发密钥了。</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213952719-1589722687.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<h2>获取Android地图SDK</h2>
<p>然后再回到百度开放平台中开发文档下的Android开发下Android地图SDK</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416213957267-1604352461.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后选择自定义下载</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214001027-1331349290.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后这里只勾选几个基本功能,具体功能根据自己需求勾选,然后点击下方的开发包和示例代码进行下载</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214004165-1115504810.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>项目中集成SDK</h2>
<p>使用AndroidStudio新建项目,将项目视图由Android切换为Project</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214008834-313527406.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<p>这样就会显示libs目录,然后解压上面下载的开发包,可以看到其下面libs目录下两个jar包,将其复制到项目的lib下</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214012723-1275812076.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后选中这两个jar包右键Add As Library,添加到库</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214018447-965065523.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214023633-1344006168.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后在src/main下新建JNIlibs目录</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214028207-1430320041.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后将上面SDK下libs下的所有目录复制到此目录下</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214035591-1944129663.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<p>然后将项目切换回Android视图下,打开activity_main.xml修改布局文件</p>
<p>将布局修改为相对布局,并添加百度地图组件,并设置id</p>
<div class="cnblogs_code">
<pre>&lt;?xml version=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1.0</span><span style="color: rgba(128, 0, 0, 1)">"</span> encoding=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">"</span>?&gt;
&lt;RelativeLayout xmlns:android=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://schemas.android.com/apk/res/android</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    xmlns:app</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://schemas.android.com/apk/res-auto</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    xmlns:tools</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://schemas.android.com/tools</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    android:layout_width</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">match_parent</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    android:layout_height</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">match_parent</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    tools:context</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.MainActivity</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;

    &lt;<span style="color: rgba(0, 0, 0, 1)">com.baidu.mapapi.map.MapView
      android:id</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@+id/bmapview</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:layout_width</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">match_parent</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:layout_height</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">match_parent</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:clickable</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">true</span><span style="color: rgba(128, 0, 0, 1)">"</span>/&gt;

&lt;/RelativeLayout&gt;</pre>
</div>
<p>&nbsp;</p>
<p>然后来到MainActivity.java中,首先声明地图组件然后再onCreate方法中初始化地图SDK,注意初始化地图SDK</p>
<p>的代码要放在setContentView的代码前。</p>
<p>然后还需要分别设置地图组件的声明周期。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">package com.badao.baidumap;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MainActivity extends AppCompatActivity {

    </span><span style="color: rgba(0, 0, 255, 1)">private</span> MapView mapView;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明地图组件</span>
<span style="color: rgba(0, 0, 0, 1)">
    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化地图SDK</span>
<span style="color: rgba(0, 0, 0, 1)">      SDKInitializer.initialize(getApplicationContext());
      setContentView(R.layout.activity_main);
      mapView </span>=<span style="color: rgba(0, 0, 0, 1)"> (MapView) findViewById(R.id.bmapview);
    }

    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onPause() {
      super.onPause();
      mapView.onPause();
    }

    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onDestroy() {
      super.onDestroy();
      mapView.onDestroy();
      mapView </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    }

    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onResume() {
      super.onResume();
      mapView.onResume();
    }
}</span></pre>
</div>
<p>&nbsp;</p>
<p>然后打开mainfests下的AndroidManifest.xml</p>
<p>首先添加meta-data标签,内容如下</p>
<div class="cnblogs_code">
<pre>      &lt;meta-<span style="color: rgba(0, 0, 0, 1)">data
            android:name</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">com.baidu.lbsapi.API_KEY</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
            android:value</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">申请的开发密钥</span><span style="color: rgba(128, 0, 0, 1)">"</span>/&gt;</pre>
</div>
<p>&nbsp;</p>
<p>然后进行权限的声明。完整示例代码</p>
<div class="cnblogs_code">
<pre>&lt;?xml version=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1.0</span><span style="color: rgba(128, 0, 0, 1)">"</span> encoding=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">"</span>?&gt;
&lt;manifest xmlns:android=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://schemas.android.com/apk/res/android</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    xmlns:tools</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://schemas.android.com/tools</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    package</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">com.badao.baidumap</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;

    &lt;!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 --&gt;
    &lt;uses-permission android:name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">android.permission.INTERNET</span><span style="color: rgba(128, 0, 0, 1)">"</span> /&gt;
    &lt;!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 --&gt;
    &lt;uses-permission android:name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">android.permission.ACCESS_NETWORK_STATE</span><span style="color: rgba(128, 0, 0, 1)">"</span> /&gt;

    &lt;!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 --&gt;
    &lt;uses-permission android:name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">android.permission.READ_EXTERNAL_STORAGE</span><span style="color: rgba(128, 0, 0, 1)">"</span> /&gt;
    &lt;!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 --&gt;
    &lt;uses-permission android:name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">android.permission.WRITE_EXTERNAL_STORAGE</span><span style="color: rgba(128, 0, 0, 1)">"</span> /&gt;


    &lt;<span style="color: rgba(0, 0, 0, 1)">application
      android:allowBackup</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">true</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:icon</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@mipmap/ic_launcher</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:label</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@string/app_name</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:roundIcon</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@mipmap/ic_launcher_round</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:supportsRtl</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">true</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      android:theme</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@style/AppTheme</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
      &lt;meta-<span style="color: rgba(0, 0, 0, 1)">data
            android:name</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">com.baidu.lbsapi.API_KEY</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
            android:value</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">申请的开发密钥</span><span style="color: rgba(128, 0, 0, 1)">"</span>/&gt;
      &lt;activity android:name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.MainActivity</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
            &lt;intent-filter&gt;
                &lt;action android:name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">android.intent.action.MAIN</span><span style="color: rgba(128, 0, 0, 1)">"</span> /&gt;

                &lt;category android:name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">android.intent.category.LAUNCHER</span><span style="color: rgba(128, 0, 0, 1)">"</span> /&gt;
            &lt;/intent-filter&gt;
      &lt;/activity&gt;
    &lt;/application&gt;

&lt;/manifest&gt;</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这块代码可以参照之前在百度开放平台下载的示例代码。</p>
<p>或者可以参照官网的开发指南</p>
<p>http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/showmap</p>
<p>然后需要将项目运行在可联网的真机或者第三方模拟器上</p>
<p><img alt=""></p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1328191/202004/1328191-20200416214111243-805159067.jpg" alt=""></p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    博客园:
https://www.cnblogs.com/badaoliumangqizhi/
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。<br><br>
来源:https://www.cnblogs.com/badaoliumangqizhi/p/12716045.html
頁: [1]
查看完整版本: Android中应用百度地图API开发地图APP实例-显示百度地图