揽清枫 發表於 2021-12-3 23:03:00

百度地图定位开发——Android地图sdk开发

<p>百度地图Android定位SDK是为Android移动端应用提供的一套简单易用的定位服务接口,专注于为广大开发者提供最好的综合定位服务。通过使用百度定位SDK,开发者可以轻松为应用程序实现智能、精准、高效的定位功能。</p>
<p><img src="https://img2020.cnblogs.com/blog/2556426/202112/2556426-20211203170808030-1231597218.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;打开百度地图sdk开发,输入应用名称这里需要输入SHA1,具体寻找SHA1过程可以参考官方的文档</p>
<p><img src="https://img2020.cnblogs.com/blog/2556426/202112/2556426-20211203221752017-1891473574.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;创建成功后,下载官方的jar包,将解压后的所有文件添加到申请AK时使用的项目文件中的lib目录中。然后在app目录下的build.gradle文件中android块中配置sourceSets标签,内容如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">sourceSets {
         main {
               jniLibs.srcDir </span>'libs'<span style="color: rgba(0, 0, 0, 1)">
         }
    }</span></pre>
</div>
<p>此时就能将部分目录添加到项目视图中,现在需要将jar文件添加到项目视图中。在app目录的build.gradle的dependencies块中添加以下代码,然后右键目标jar文件,选择Add as library,就能将其加入到项目视图中。</p>
<div class="cnblogs_code">
<pre>implementation files('libs\\BaiduLBS_Android.jar')</pre>
</div>
<p>然后打开AndroidManifest.xml文件,在&lt;application&gt;中加入如下代码配置开发密钥AK</p>
<p><img src="https://img2020.cnblogs.com/blog/2556426/202112/2556426-20211203222103782-514217365.png"></p>
<p>&nbsp;</p>
<p>,并且根据官方文档,添加权限</p>
<p><img src="https://img2020.cnblogs.com/blog/2556426/202112/2556426-20211203222159269-1571486652.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<strong><span style="font-size: 18pt">显示地图</span></strong></p>
<p>&nbsp;</p>
<p>我们在xml文件的代码中直接输入</p>
<div class="cnblogs_code">
<pre>&lt;<span style="color: rgba(0, 0, 0, 1)">com.baidu.mapapi.map.MapView
      android:id</span>="@+id/bmapView"<span style="color: rgba(0, 0, 0, 1)">
      android:layout_width</span>="411dp"<span style="color: rgba(0, 0, 0, 1)">
      android:layout_height</span>="662dp"<span style="color: rgba(0, 0, 0, 1)">
      android:clickable</span>="true"<span style="color: rgba(0, 0, 0, 1)">
      app:layout_constraintBottom_toBottomOf</span>="parent"<span style="color: rgba(0, 0, 0, 1)">
      app:layout_constraintEnd_toEndOf</span>="parent"<span style="color: rgba(0, 0, 0, 1)">
      app:layout_constraintStart_toStartOf</span>="parent"<span style="color: rgba(0, 0, 0, 1)">
      app:layout_constraintTop_toTopOf</span>="parent"<span style="color: rgba(0, 0, 0, 1)">
      tools:ignore</span>="MissingClass" /&gt;</pre>
</div>
<p>然后我们需要初始化地图,创建一个activity</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> com.example.zty_map;

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> androidx.appcompat.app.AppCompatActivity;

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.app.Application;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.os.Bundle;

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.baidu.mapapi.CoordType;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.baidu.mapapi.SDKInitializer;

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

    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate() {
      </span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate();
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在使用SDK各组件之前初始化context信息,传入ApplicationContext</span>
      SDKInitializer.initialize(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。</span>
<span style="color: rgba(0, 0, 0, 1)">      SDKInitializer.setCoordType(CoordType.BD09LL);
    }
}</span></pre>
</div>
<p>并且在AndroidManifest中声明这个application</p>
<p><img src="https://img2020.cnblogs.com/blog/2556426/202112/2556426-20211203223058348-1468374704.png"></p>
<p>&nbsp;</p>
<p>之后就可以通过创建地图的实例MyMap来显示地图</p>
<div class="cnblogs_code">
<pre>      mMapView =<span style="color: rgba(0, 0, 0, 1)"> findViewById(R.id.bmapView);
      mBaiduMap</span>=<span style="color: rgba(0, 0, 0, 1)">mMapView.getMap();
      mBaiduMap.setMyLocationEnabled(</span><span style="color: rgba(0, 0, 255, 1)">true</span>);</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2556426/202112/2556426-20211203223335658-1147887274.png"></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 18pt">显示定位</span></strong></p>
<p>首先我们需要添加权限</p>
<div class="cnblogs_code">
<pre>&lt;!-- 这个权限用于进行网络定位 --&gt;
&lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;
&lt;!-- 这个权限用于访问GPS定位 --&gt;
&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;</pre>
</div>
<p>然后在AndroidManifest的application中声明定位的service组件</p>
<div class="cnblogs_code">
<pre>&lt;service android:name="com.baidu.location.f"<span style="color: rgba(0, 0, 0, 1)">
    android:enabled</span>="true"<span style="color: rgba(0, 0, 0, 1)">
    android:process</span>=":remote"/&gt;</pre>
</div>
<p>然后在mainactivity中添加内置类</p>
<div class="cnblogs_code">
<pre>    <span style="color: rgba(0, 0, 255, 1)">class</span> MyLocationListener <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> BDAbstractLocationListener {
      @Override
      </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onReceiveLocation(BDLocation location) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mapView 销毁后不在处理新接收的位置</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span> (location == <span style="color: rgba(0, 0, 255, 1)">null</span> || mMapView == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
                </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
            }
            MyLocationData locData </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MyLocationData.Builder()
                  .accuracy(location.getRadius())
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处设置开发者获取到的方向信息,顺时针0-360</span>
<span style="color: rgba(0, 0, 0, 1)">                  .direction(location.getDirection()).latitude(location.getLatitude())
                  .longitude(location.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);
      }
    }</span></pre>
</div>
<p>&nbsp;然后在oncreate中打开位置监听</p>
<div class="cnblogs_code">
<pre>option.setOpenGps(<span style="color: rgba(0, 0, 255, 1)">true</span>); </pre>
</div>
<p>设置定位参数:</p>
<div class="cnblogs_code">
<pre> LocationClientOption option = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> LocationClientOption();
      option.setOpenGps(</span><span style="color: rgba(0, 0, 255, 1)">true</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打开gps</span>
      option.setCoorType("bd09ll"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置坐标类型</span>
      option.setScanSpan(1000);</pre>
</div>
<p>最后打开定位功能,就能显示定位</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mLocationClient.start();<br>mLocationClient.requestLocation();</span></pre>
</div>
<p>最后运行,查看定位,由于是虚拟机需要导入一个kml文件来显示定位</p>
<p><img src="https://img2020.cnblogs.com/blog/2556426/202112/2556426-20211203224033362-1225572438.png"></p>
<p>&nbsp;</p>
<p>github地址:https://github.com/Nanne1ess/ZTY-MAP.git</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/nanne1ess/p/15640516.html
頁: [1]
查看完整版本: 百度地图定位开发——Android地图sdk开发