目录

  • 实验环境
  • 申请 API Key
  • 使用百度定位
    • 准备 LBS SDK
  • 编码

声明:本人小白,文章作为自己的学习笔记,与大家分享,欢迎大家于本人学习交流
本文 refer to

作者:郭霖
书名:第一行代码Android第2版
出版社:人民邮电出版社

感谢此书籍原创者,如有侵犯您的知识产权和版权问题,请通知本人,本人会即时做出处理并删除文章

Email:louhergetup@163.com

感谢您阅读我的文章,未经本人许可,文章不得用于商业用途。转载请注明出处,否则属于侵权行为。

实验环境

  • 操作系统:win10 64
  • 软件环境:Android Studio 3.5.3
  • 编程语言:Java 13

申请 API Key

首先需要注册百度账号,登陆百度账号,打开网址 http://developer.baidu.com/user/info 填写注册信息并提交,然后去自己的邮箱通过验证,就完成注册了。
接着访问 https://lbsyun.baidu.com/apiconsole/key 会看到下面这个界面

点击 创建应用 申请 API Key, 应用名称可以随便填,这里填 LBSTest,应用类型选择 Android SDK,启用服务保持沉默即可,如下图所示

发布版 SHA1 是打包程序时所用的签名文件的 SHA1 指纹,可以通过 Android 查看,新建一个 Android Studio 项目,如图(开发版 SHA1 我们等下再说)

接下来,一路 Next,就可以了。

点击右侧 Gradle,然后点击标红的 Sync 按钮,

然后会出现下图

点击 :app --> Task --> android -->

双击 signingReport, 我们即可得到 发布版SHA1 指纹

把 SHA1: 后面的字符复制到创建百度地图应用界面的对应位置,
开发版的 SHA1 我们需要创建一个正式的签名文件,点击 Android Studio 顶部工具栏中的 Build --> Generate Signed APK,弹出如下窗口

点击 Create new… 弹出如下窗口

点击第一行的三个点,弹出如下窗口,选择签名文件保存的路径,并填写签名文件名称,并点击 OK

填写密码和名字

点击 OK,会回到如下界面,然后关闭这个窗口

然后按 win + r 输入 cmd 输入如下命令,

keytool -list -v -keystore <签名文件路径>

比如我创建的签名文件路径为 D:\miyao.jks\LBSTest.jks ,如图

输入你刚才设置的密码,如图

把 SHA1:后的字符复制到创建百度地图应用界面的对应位置。
包名这里我们填 com.example.a83445.lbstest (包名在我们创建 Android project 的界面中已经设置了)

点击提交,应用就创建成功了

上图中 OmVEuKl1IxomNQ1jq1qlGnePFpwsIdq6 就是我们申请到的 API Key。

使用百度定位

建议在手机上运行调试

准备 LBS SDK

在开始编码之前,我们需要下载百度 LBS 开放平台的 SDK,下载地址为 http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar 选择 基础定位基础地图 然后点击 开发包 下载按钮

解压下载的文件,在下载文件中 libs 目录下的内容分为两部分,如图,BaiduLBS_Android.jar 是 Java 层要使用的,其他子目录下的 so 文件时 Native 层要用到的。so 文件是用 C/C++ 语言编写的,然后再用 NDK 编译出来的。 我们这里不需要编写 C/C++ 的代码,因为百度都已经做好了封装, 但是我们需要将 libs 目录下的每一个文件都放到正确的位置。

观察一下当前的项目结构, app 模块下有一个 libs 目录,这里就是用来存放所有 Jar 包的,我们将 BaiduLBS_Android.jar 复制到这个目录下,如下图所示

接下来,展开 src/main 目录,鼠标右键点击该目录–>New–>Directory, 创建一个名为 jniLibs 的目录,这个目录是专门用来存放 so 文件的,然后把压缩包里的其他所有目录直接复制到这里,如图

为了让项目引用到 Jar 包中提供的接口,我们需要点击一下 Android Studio 顶部工具栏的 Sync 按钮(就是我前面圈出来那个按钮)

点击 Sync 之后,libs 目录下的 jar 文件就会多出一个向右的箭头,表示项目已经能引用到这些 jar 包
这样我们就把 LBS 的 SDK 都准备好了,接下来就可以开始编码了

编码

MainActivity.java 代码如下

public class MainActivity extends AppCompatActivity {public LocationClient mLocationClient;private MapView mapView;private BaiduMap baiduMap;private boolean isFirstLocate = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mLocationClient = new LocationClient(getApplicationContext());mLocationClient.registerLocationListener(new MyLocationListener());SDKInitializer.initialize(getApplicationContext());//初始化setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.bmapView);baiduMap = mapView.getMap();baiduMap.setMyLocationEnabled(true);//用于显示我的位置List<String> permissionList = new ArrayList<>();if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);}if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.READ_PHONE_STATE);}if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if (!permissionList.isEmpty()){String[] permissions = permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);}else {requestLocation();}}//用于首次定位让地图移动到当前位置private void navigateTo(BDLocation location){if(isFirstLocate){LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());//用于存放经纬度MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);baiduMap.animateMapStatus(update);update = MapStatusUpdateFactory.zoomTo(16f);//缩放级别baiduMap.animateMapStatus(update);isFirstLocate = false;}MyLocationData.Builder locationBuilder = new MyLocationData.Builder();locationBuilder.latitude(location.getLatitude());locationBuilder.longitude(location.getLongitude());MyLocationData locationData = locationBuilder.build();baiduMap.setMyLocationData(locationData);}private void requestLocation() {initLocation();mLocationClient.start();//start方法开始定位}private void initLocation(){LocationClientOption option = new LocationClientOption();option.setScanSpan(5000);//5秒更新一次位置信息option.setIsNeedAddress(true);//启用详细位置option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);//使用GPS定位mLocationClient.setLocOption(option);}@Overrideprotected void onResume(){super.onResume();mapView.onResume();}@Overrideprotected void onPause(){super.onPause();mapView.onPause();}@Overrideprotected void onDestroy(){super.onDestroy();mLocationClient.stop();//活动销毁mapView.onDestroy();baiduMap.setMyLocationEnabled(false);}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults) {switch (requestCode){case 1:if (grantResults.length > 0) {for (int result : grantResults) {if (result != PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "必须同意所有权限才能使用本程序",Toast.LENGTH_SHORT).show();finish();return;}}requestLocation();}else{Toast.makeText(this, "发生未知错误", Toast.LENGTH_SHORT).show();finish();}break;default:}}public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(final BDLocation location){if(location.getLocType() == BDLocation.TypeGpsLocation|| location.getLocType() == BDLocation.TypeNetWorkLocation){navigateTo(location);}}}
}

activity_main.xml 布局文件代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent">//地图控件使其占满整个屏幕<com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true"/></LinearLayout>

权限文件 AndroidManifest.xml 代码如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.a83445.lbstest"><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WAKE_LOCK"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="OmVEuKl1IxomNQ1jq1qlGnePFpwsIdq6" /><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>//注册百度 LBS SDK 服务<serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"></service></application>

至此,Android 百度地图初步开发完成

Android 百度地图开发详解相关推荐

  1. Android百度地图实例详解之仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)

    Android百度地图实例详解之仿摩拜单车APP(包括附近车辆.规划路径.行驶距离.行驶轨迹记录,导航等) 标签: android百度地图行驶轨迹记录共享单车行驶距离和时间 2017-03-08 20 ...

  2. Android百度地图实例详解之仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,轨迹回放,导航等)

    转载请标明地址:http://blog.csdn.net/gaolei1201/article/details/60876811 2016一路有你,2017一起奋斗! 最近共享单车很火,动辄几亿美刀, ...

  3. Android高德地图开发详解

    这段时间开发的时候用到了高德地图,对高德地图开发有心得体会,现在分享给大家,对我开发过百度地图的我来说,总体来说高德地图Demo,没有百度讲解的详细 个人更偏向于使用百度地图,但是没办发,项目需要使用 ...

  4. Android百度地图开发入门教程

    Android百度地图开发入门教程 1.平台注册登录 2.创建应用 3.Android studio配置 4.代码编写 5.最终效果(建议真机) 1.平台注册登录 登录百度地图开放平台网站注册并登录 ...

  5. 超详细的Android百度地图开发:在APP上定位并显示出来

    超详细的Android百度地图开发:在APP上定位并显示出来 一 写在前面 二 注册百度开发者账户.申请API KEY 三.代码实现 四.问题 五.总结 一 写在前面 由于项目所需,我需要在手机APP ...

  6. Android 百度地图开发(二)

    前面我们一起了解了百度地图的申请与集成Android 百度地图开发(一),今天我们接着来学习百度地图. 今天主要来了解如下问题: 1.百度地图的生命周期控制 上一篇张我们已经在布局文件里增加了mapV ...

  7. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划

    2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划 开发前配置,显示基本地图,实时定位等查看之前代码,此博客紧接上一博客:https://blog.csdn.ne ...

  8. Android网页浏览器开发详解(一)

    Android网页浏览器开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Androi ...

  9. [android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

           前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Intere ...

  10. android百度地图开发

    android百度地图开发 使用android开发百度地图需要事先在百度地图开发者平台上注册账号并下载百度地图相关的工具包,之后配置到自己的程序中,具体可参考https://lbsyun.baidu. ...

最新文章

  1. 同花顺的数据格式总览(转帖)
  2. Python标准模块--asyncio
  3. 语言学与计算机应用学什么,2016考研专业:语言学及应用语言学
  4. web项目路径如何更改
  5. Java NIO框架Mina
  6. python重定向_Python接口自动化(十)重定向(Location)
  7. node mysql 模块化_Node.js中的模块化
  8. 云主机搭建linux web,linux云主机web服务的搭建和配置
  9. Maven中央仓库地址和Nexus 下载地址
  10. 杨辉三角形Java实现
  11. 电子罗盘的工作原理及校准
  12. 电商专业术语中英文对照
  13. 如何怎样在M1芯片Mac上安装PS?M1芯片安装Photoshop详细教学方法2021最新方法
  14. MySql项目查询优化经验总结
  15. 蓝桥杯2022年第十三届决赛真题-修路
  16. 二维卷积网络函数con2d
  17. JDK7安装和配置 JAVA JDK7安装配置教程
  18. 【python】zip 介绍和例子
  19. LeetCode(319):灯泡开关 Bulb Switcher(Java)
  20. 36岁转行学java_年纪大了还想转行当程序员,现在学java还来得及吗

热门文章

  1. 教你一步步实现bibibi弹幕功能。
  2. 常用代码大全(新手入门必备)
  3. c语言用二维数组学生姓名,C语言实验报告合集-_人人文库网
  4. 前后端分离 基于SpringBoot+mybatis+Java Mail+Lay UI+Ajax 的班级管理系统(webapp +安卓应用)
  5. 测试用例(二)APP基本功能测试用例
  6. C#初学者教程系列19:Winform应用程序
  7. weblogic安装
  8. 高通AR系列与MTK芯片对比专业详解
  9. 关于oneNote插件加载不显示的问题(NoteHighlight)
  10. CorelDRAWX4的VBA插件开发(十五)选择分辨率一键导出多张图片到桌面