想要在APP中加入百度地图,考虑到使用百度地图API。主要内容参考百度地图开放平台。


目录

  • 获取秘钥
  • 百度地图开发包下载
  • Android Studio 配置
  • 简单实践
  • 显示地图
  • 绘制点标记
  • 绘制线标记


获取秘钥

  1. 通过网址百度地图应用管理创建应用获取秘钥。如果不是开发者,需要先注册,步骤参考文档注册百度开发者
  2. 上述步骤完成后,应该看到的结果是这样的:

    至此,秘钥获取成功。

百度地图开发包下载

  1. 下载地址:LBS Android SDK
  2. android studio怎么看调用栈 android studio调用api_jar文件


  3. 选择自定义下载。
  4. android studio怎么看调用栈 android studio调用api_jar文件_02


  5. 根据上图,根据需要选择,之后点击“开发包”即可。下载得到的文件解压以后如下。
  6. android studio怎么看调用栈 android studio调用api_jar文件_03

  7. 上述文件可以分为两类,最后一个BaiduLBS_Android.jar文件和其他的文件夹(内部都为.so)。
Android Studio 配置
  1. 将.jar文件放入app->libs目录下。见下图
  2. android studio怎么看调用栈 android studio调用api_jar文件_04


  3. 将剩余文件放入app->src->main->jniLibs目录下,见上图。(jniLibs目录需要自己创建)
  4. 在工程配置中需要将前面添加的jar文件集成到我们的工程中。点击下图所示按钮。(也可以通过对.jar文件右键,选择Add As Library,就不进行这步操作了)
  5. android studio怎么看调用栈 android studio调用api_jar文件_05


  6. 可以看见.jar文件发生了变化,表示集成配置成功。

android studio怎么看调用栈 android studio调用api_开发者_06

简单实践

显示地图

  1. 添加秘钥
    配置文件app/src/AndroidManifest.xml中添加如下代码(开发者key对应之前申请到的秘钥)
<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>
  1. 在外部添加如下权限声明:
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
<!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

注:自Android6.0起部分权限的使用需要开发者在代码中动态申请。

  1. 在layout 布局文件中添加如下控件。
<com.baidu.mapapi.map.MapView
	android:id="@+id/bmapView"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:clickable="true" />
  1. 编辑MainActivity主活动文件。
package com.example.bdmaptest;

import .AppCompatActivity;

import android.os.Bundle;

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

public class MainActivity extends AppCompatActivity {

    private MapView mMapView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext()); 
        setContentView(R.layout.activity_main);
        //SDKInitializer.setCoordType(CoordType.BD09LL); //默认是BD09LL坐标
        mMapView=findViewById(.bmapView);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }
}

说一下注意点。

  • SDKInitializer.initialize(getApplicationContext());这行代码一定要放在setContentView(R.layout.activity_main);之前。
    不然会报错Error inflating class com.baidu.mapapi.map.MapView
  • 需要在主活动的 onResume(),onPause()和onDestroy的同时对地图进行生命周期管理。即mMapView.onxxxx()

运行结果:

android studio怎么看调用栈 android studio调用api_android_07

绘制点标记

  1. 在上一段代码的onCreate()末尾添加如下代码段即可。
//获得地图控制器
        BaiduMap mBaiduMap = mMapView.getMap();
        //定义Maker坐标点
        LatLng point = new LatLng(39.963175, 116.400244);
        //构建Marker图标
        BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
        //构建MarkerOption,用于在地图上添加Marker
        OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
        //在地图上添加Marker,并显示
        mBaiduMap.addOverlay(option);
  1. 大致解释在代码段的注释中,修改绘制点的属性可以参考开发指南.详细信息需要参考类参考文档

运行一下,结果如图(可以看到图上出现小箭头= =)。

android studio怎么看调用栈 android studio调用api_jar文件_08

绘制线标记

  1. 在上一段代码的onCreate()末尾添加如下代码段即可。
//构建折线点坐标
 LatLng p1 = new LatLng(39.97923, 116.357428);
 LatLng p2 = new LatLng(39.94923, 116.397428);
 LatLng p3 = new LatLng(39.97923, 116.437428);
 List<LatLng> points = new ArrayList<LatLng>();
 points.add(p1);
 points.add(p2);
 points.add(p3);
 //设置折线的属性
 OverlayOptions mOverlayOptions = new PolylineOptions().width(10).color(0xAAFF0000).points(points);
 //在地图上绘制折线
 //mPloyline 折线对象
 Overlay mPolyline = mBaiduMap.addOverlay(mOverlayOptions);
  1. 绘制线条的属性可以简单参考开发指南 运行一下,看看效果:
  2. android studio怎么看调用栈 android studio调用api_开发者_09