说明:

集成百度地图,如果你看着开发文档集成,那么机会走很多弯路,百度地图的开发文档写的太简单,考虑的情况太少了。

因为百度第一的版本太多了,并且现在实行了定位、热力、全景的分包形式,所以如果你按照了开发文档说的下载了全量BaiduLBS_AndroidSDK同时又看了开发文档下载了定位sdk locSDK_6.13 那么你的项目必定冲突无法编译成功。

我的做法是:下载百度地图demo,完全按照demo进行开发。

百度地图Demo:

Demo地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download

如果是AndroidStudio开发:建议参考demo中的 BaiduMap_AndroidSDK_v4.3.1_Sample-BaiduMapsApiASDemo 包名有可能根据实际情况二改变。

注意:

  • libs的jar包一定和.so包对应。例如:locSDK_6.13.jar 一定 要对应 liblocSDK6a.so 否则 无法实现定位成功。
  • 秘钥填写:发布版SHA1 和 开发版SHA1都要对应填写,否则直接用AndroidStudio运行的项目无法定位。

以上都会造成定位错误,定位会定位在非洲的海洋中。

参考Demo开发后的个人扩展代码记录:

1、配置秘钥AndroidManifest.xml

<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><!-- 这个权限用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 这个权限用于访问GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- OpenGLES 2.0 --><uses-feature android:glEsVersion="0x00020000" android:required="true" /><supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="false"android:resizeable="true"android:smallScreens="true" /><!--baidu--><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="你的key 或者 AK" /><serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote" ></service>

2、导入.jar包和.so包

3、考入LocationDemo.java代码

package baidumapsdk.demo.map;import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;import baidumapsdk.demo.R;/*** 此demo用来展示如何结合定位SDK实现定位,并使用MyLocationOverlay绘制定位位置 同时展示如何使用自定义图标绘制并点击时弹出泡泡*/
public class LocationDemo extends Activity implements SensorEventListener {// 定位相关LocationClient mLocClient;public MyLocationListenner myListener = new MyLocationListenner();private LocationMode mCurrentMode;BitmapDescriptor mCurrentMarker;private static final int accuracyCircleFillColor = 0xAAFFFF88;private static final int accuracyCircleStrokeColor = 0xAA00FF00;private SensorManager mSensorManager;private Double lastX = 0.0;private int mCurrentDirection = 0;private double mCurrentLat = 0.0;private double mCurrentLon = 0.0;private float mCurrentAccracy;MapView mMapView;BaiduMap mBaiduMap;// UI相关OnCheckedChangeListener radioButtonListener;Button requestLocButton;boolean isFirstLoc = true; // 是否首次定位private MyLocationData locData;private float direction;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_location);requestLocButton = (Button) findViewById(R.id.button1);mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);//获取传感器管理服务mCurrentMode = LocationMode.NORMAL;requestLocButton.setText("普通");OnClickListener btnClickListener = new OnClickListener() {public void onClick(View v) {switch (mCurrentMode) {case NORMAL:requestLocButton.setText("跟随");mCurrentMode = LocationMode.FOLLOWING;mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));MapStatus.Builder builder = new MapStatus.Builder();builder.overlook(0);mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));break;case COMPASS:requestLocButton.setText("普通");mCurrentMode = LocationMode.NORMAL;mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));MapStatus.Builder builder1 = new MapStatus.Builder();builder1.overlook(0);mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder1.build()));break;case FOLLOWING:requestLocButton.setText("罗盘");mCurrentMode = LocationMode.COMPASS;mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));break;default:break;}}};requestLocButton.setOnClickListener(btnClickListener);RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup);radioButtonListener = new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {if (checkedId == R.id.defaulticon) {// 传入null则,恢复默认图标mCurrentMarker = null;mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, null));}if (checkedId == R.id.customicon) {// 修改为自定义markermCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker,accuracyCircleFillColor, accuracyCircleStrokeColor));}}};group.setOnCheckedChangeListener(radioButtonListener);// 地图初始化mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap = mMapView.getMap();// 开启定位图层mBaiduMap.setMyLocationEnabled(true);// 定位初始化mLocClient = new LocationClient(this);mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);mLocClient.setLocOption(option);mLocClient.start();}@Overridepublic void onSensorChanged(SensorEvent sensorEvent) {double x = sensorEvent.values[SensorManager.DATA_X];if (Math.abs(x - lastX) > 1.0) {mCurrentDirection = (int) x;locData = new MyLocationData.Builder().accuracy(mCurrentAccracy)// 此处设置开发者获取到的方向信息,顺时针0-360.direction(mCurrentDirection).latitude(mCurrentLat).longitude(mCurrentLon).build();mBaiduMap.setMyLocationData(locData);}lastX = x;}@Overridepublic void onAccuracyChanged(Sensor sensor, int i) {}/*** 定位SDK监听函数*/public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {// map view 销毁后不在处理新接收的位置if (location == null || mMapView == null) {return;}mCurrentLat = location.getLatitude();mCurrentLon = location.getLongitude();mCurrentAccracy = location.getRadius();locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(mCurrentDirection).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);if (isFirstLoc) {isFirstLoc = false;LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatus.Builder builder = new MapStatus.Builder();builder.target(ll).zoom(18.0f);mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));}}public void onReceivePoi(BDLocation poiLocation) {}}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();//为系统的方向传感器注册监听器mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_UI);}@Overrideprotected void onStop() {//取消注册传感器监听mSensorManager.unregisterListener(this);super.onStop();}@Overrideprotected void onDestroy() {// 退出时销毁定位mLocClient.stop();// 关闭定位图层mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy();}}

4、考入布局代码

1、参考BaiduMap_AndroidSDK_v4.3.1_Sample-BaiduMapsApiASDemo 的LocationDemo.java类实现了简单的定位。

2、不显示缩放控件activity_location.xml;主要的是MapView

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginTop="80dip"android:background="#D000"android:minWidth="100dip"android:orientation="vertical"android:padding="2dp" ><RadioGroupandroid:id="@+id/radioGroup"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="定位icon" ><RadioButtonandroid:id="@+id/defaulticon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="true"android:text="默认图标" ></RadioButton><RadioButtonandroid:id="@+id/customicon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="自定义图标" ></RadioButton></RadioGroup></LinearLayout><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:layout_marginRight="25dp"android:layout_marginTop="10dip" /></RelativeLayout>

5、调试运行。

6、控件控制

mMapView.showZoomControls(false);//是否显示缩放控件

百度地图 - Android初步集成相关推荐

  1. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  2. 百度地图 Android SDK - 检索功能使用的简单演示样例

    百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...

  3. android开发百度地图坐标偏差,利用百度地图Android sdk高仿微信发送位置功能及遇到的问题...

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 我在实现这个功能的时候,遇到一些困难,可能也是别人将会遇到的困难,特在此列出 1.在微信发送 ...

  4. 利用百度地图Android定位SDK获取经纬度

    环境的搭建(参考上一次的文章) 百度地图Android定位SDK的使用 2.在Android studio里设计程序来获取经纬度 界面布局activity_main.xml文件的源代码: <?x ...

  5. android地图模式,百度地图Android V2.0新增卫星图及3D模式功能

    近日,百度地图Android版V2.0正式对外发布.本次升级引入了全新引擎.全新数据并采用全新界面,因此这个版本被称为全新跨代版.它不仅为用户打造更加优质精准的地图检索及浏览感受,同时还有效节省使用地 ...

  6. 百度地图android自定义文字,Android SDK | 百度地图API SDK

    什么是百度地图Android SDK? 百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口, 您可以通过该接口实现丰富的LBS功能: 地图:提供地图(2D.3 ...

  7. android怎么加载3d地图,百度地图Android V2.0新增卫星图及3D模式功能

    近日,百度地图Android版V2.0正式对外发布.本次升级引入了全新引擎.全新数据并采用全新界面,因此这个版本被称为全新跨代版.它不仅为用户打造更加优质精准的地图检索及浏览感受,同时还有效节省使用地 ...

  8. iOS开发之百度地图的简单集成——标注POI检索

    iOS开发之百度地图的简单集成--标注&POI检索 .h文件 // Created by XK_Recollection on 16/6/15. // Copyright © 2016年 GN ...

  9. Flutter集成百度地图-Android集成

    版本:flutter 2.10.4 百度地图3.2.0 IDE:Android Studio 最近公司项目需要集成地图,看着百度地图有flutter插件就开始忙活了,踩了一脑门子的坑,现在分享给大家. ...

最新文章

  1. Python使用matplotlib可视化绘制并导出可视化结果图表到PDF文件中
  2. python pip安装模块失败的原因
  3. [Firebug]用来武装Firebug的十三款Firefox插件
  4. Golang 入门笔记(二)上
  5. 计算机网络基本操作命令的使用,计算机网络-路由器基本命令操作实验指导书--华为...
  6. 最小生成树 Kruskal算法 Prim算法
  7. 电商价格战 谁才是最大受益者
  8. pyinstaller安装_如何打包Python Web项目,实现免安装一键启动?
  9. STVP烧录HEX文件方法
  10. 上传视频到FTP服务器+播放
  11. 线上Request method ‘GET‘ not supported 问题
  12. Java 去除字符串中的空白字符
  13. godaddy php mail,如何使用godaddy web主机上的phpmailer通过365发送电子邮件
  14. linux无人值守安装实验,无人值守批量安装linux操作系统
  15. ppt编写一个抽奖系统_PPT抽奖程序
  16. (超全)Vue.js学习笔记—webpack基础配置(webpack4+babel7+vue2)
  17. 动画模拟实现电梯的载客运行过程
  18. 微分方程Gear方法MATLAB,常微分方程的数值解
  19. EndNote参考文献格式_国标
  20. 【C语言】PAT乙级1004 成绩排名

热门文章

  1. 【数据结构】单链表逆置的详解
  2. 圆柱坐标系统中亥姆霍兹方程的解
  3. asp.net+sqlserver企业公司进销存管理系统
  4. 在单链表上实现插入排序
  5. 【扩展lucas】LOJ#2023. 「AHOI / HNOI2017」抛硬币
  6. python2安装tkinter_Ubuntu下安装Python2.6.1以及Tkinter
  7. 随想:迅速取得海量数据之结构化数据
  8. Ubuntu下安装Yah3c,以及无法上网的解决方案
  9. android sftp软件,Turbo FTP client SFTP client 安卓FTP、SFTP客户端推荐
  10. 幼儿园衔接测试卷c语言,2020年实验幼儿园幼升小衔接班期中考试试题C卷 附答案.doc...