Android中调用百度地图
一、调用百度地图 --第一种方法
1、下载百度地图SDK
SDK可以拆分下载,需要使用那一部分功能就下载相应包含的SDK,如下图
核心的的jar 和so包,放在工程中的libs目录下
2、申请key
注册百度账号申请key,格式如下:sha1值+";"+包名。
包名指的是AndroidManifest.xml 中定义的名称 ,并非工程包名
3、将百度地图加入工程
(1)在application中添加开发密钥
<application <meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的key" />
</application>
(2)添加所需权限
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
(3)添加百度地图服务
在mainfest的application标签中配置地图服务
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
(4)在布局xml文件中添加地图控件
(5)在应用程序创建时初始化 SDK引用的Context 全局变量
public class MainActivity extends Activity { MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } }
运行后就可以拿到百度地图图层
4、定位当前位置
1、开启定位图层
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
2、开启定位功能
mLocClient = new LocationClient(context);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocClient.setLocOption(option);
mLocClient.start();
3、重写监听器
继承BDLocationListener监听器,重写onReceiveLocation方法,这样就可以拿到包含在BDLocation中的定位信息,具体参看BDLocation类
4、定位当前位置
/**
* 设置地图操作点中心
*/
public void setCenterPosition(Point p){
LatLng ll = new LatLng(Double.parseDouble(p.getX()),
Double.parseDouble(p.getY()));
MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().target(ll).build());
//mBaiduMap.setMapStatus(u);
//已动画的方式切换
mBaiduMap.animateMapStatus(u);
}
利用工厂类,更新地图状态,显示当前位置。
5、利用百度地图标绘
在百度地图上标绘基本图形,可查看相关API文档。
在本项目中,标绘了圆、线、点。(OverlayOptions 接口类,一般利用其子类绘制)
1、标绘线
OverlayOptions ooPolyline = new PolylineOptions().width(width)
.color(color).points(points);
mBaiduMap.addOverlay(ooPolyline);
2、标绘圆
LatLng llCircle = new LatLng(Double.parseDouble(centerPoint.getX()),
Double.parseDouble(centerPoint.getY()));
OverlayOptions ooCircle = new CircleOptions().fillColor(fillColor)
.center(llCircle).stroke(new Stroke(5, color))
.radius(rad);
mBaiduMap.addOverlay(ooCircle);
3、标绘点(并非基本方法)
LatLng ll = new LatLng(Double.parseDouble(centerPoint.getX()),
Double.parseDouble(centerPoint.getY()));
OverlayOptions ooA = new MarkerOptions().position(ll).icon(bd)
.zIndex(9);
return (Marker) mBaiduMap.addOverlay(ooA);
二、申请AK(API Key)--第二种方法
要想使用百度地图sdk,就必须申请一个百度地图的api key。申请流程挺简单的。
首先注册成为百度的开发者,然后打开http://lbsyun.baidu.com/apiconsole/key这个网址,添加应用:
创建应用最重要的一步是【安全码】。安全码是有【数字签名】和【;】和【包名】组成。包名就是你所创建的项目的包的结构,是指AndroidManifest.xml中的manifest标签下的package的值。
数字签名指Android的签名证书的SHA1值。
获取数字签名有两种方法:
1. 第一种方法:使用eclipse查看。
打开eclipse的preferences菜单,在Android下的【Build】中可以看到SHA1的值,如下图:
2. 第二种方法:使用keytool工具(jdk自带)查看。
在控制台下,输入【cd .android】,然后输入【keytool -list -v -keystore debug.keystore】回车,然后提示你输入【秘钥库口令】,输入【android】回车然后就会显示SHA1的值。
数字签名搞定了,然后创建应用就ok了。创建完成之后,应用列表中会显示相应的AK,也就是api key。
二、下载SDK开发包
打开http://developer.baidu.com/map/index.php?title=androidsdk/sdkandev-download网址下载sdk,可以全部下载,也可以自定义下载。从V2.3.0之后的版本,SDK的开发包以可定制的形式提供下载,用户可以根据自己的项目需要勾选相应的功能下载对应的SDK开发包。
三、在android项目中引用百度SDK
1. 将开发包中的jar包和so文件添加到libs文件下。
2. 在AndroidManifest.xml中添加开发秘钥和所需权限。
[java] view plain copy

- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <meta-data
- android:name="com.baidu.lbsapi.API_KEY"
- android:value="填写你申请的AK" />
权限:
[java] view plain copy

- <!-- 百度API所需权限 -->
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <uses-permission android:name="android.permission.USE_CREDENTIALS" />
- <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
- <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
- <uses-permission android:name="android.permission.ACCESS_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.BROADCAST_STICKY" />
- <uses-permission android:name="android.permission.WRITE_SETTINGS" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
3. 在布局文件中添加地图控件:
[java] view plain copy

- <com.baidu.mapapi.map.MapView
- android:id="@+id/bmapview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clickable="true" />
4. 在应用程序创建时初始化SDK引用的Context全局变量。
[java] view plain copy

- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- //
- SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- init();
- }
这里需要注意一下:initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都不行,不然会报运行时异常,所以百度建议把该方法放到Application的初始化方法中。
然后重写activity的生命周期的几个方法来管理地图的生命周期。在activity的onResume、onPause、onDestory方法中分别执行mapview的onReusme、onPause、onDestory方法。
[java] view plain copy

- package com.bdmap.view;
- import com.baidu.mapapi.SDKInitializer;
- import com.baidu.mapapi.map.BaiduMap;
- import com.baidu.mapapi.map.MapView;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.Window;
- public class MainActivity extends Activity {
- // 百度地图控件
- private MapView mMapView = null;
- // 百度地图对象
- private BaiduMap bdMap;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- //
- SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- init();
- }
- /**
- * 初始化方法
- */
- private void init() {
- mMapView = (MapView) findViewById(R.id.bmapview);
- }
- @Override
- protected void onResume() {
- super.onResume();
- mMapView.onResume();
- }
- @Override
- protected void onPause() {
- super.onPause();
- mMapView.onPause();
- }
- @Override
- protected void onDestroy() {
- mMapView.onDestroy();
- mMapView = null;
- super.onDestroy();
- }
- }
完成以上步骤,此时就可以完成一个简单的”Hello Map“程序了。
三、普通地图和卫星地图切换
百度地图将地图的类型分为两种:普通矢量地图和卫星图。
[java] view plain copy

- mMapView = (MapView) findViewById(R.id.bmapView);
- mBaiduMap = mMapView.getMap();
- //普通地图
- mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
- //卫星地图
- mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
四、显示实时交通图(路况图)
[java] view plain copy

- //开启交通图
- mBaiduMap.setTrafficEnabled(true);
五、显示热力图
热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。通俗来说就是显示地图上某一块区域的人的密集程度。类似于下图所示:
[java] view plain copy

- //开启热力图
- mBaiduMap.setBaiduHeatMapEnabled(true);
Android中调用百度地图的更多相关文章
- [置顶]
Xamarin android如何调用百度地图入门示例(一)
在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...
- 【月入41万】Mono For Android中使用百度地图SDK
借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...
- Vue --》 如何在vue中调用百度地图
1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/ ...
- 如何在网页中调用百度地图api
我想在木有提供地图接口的年代,前端工程师门要么只写上企业的具体地址,要么就是用一张标有自己位置的地图图片.但是现在不一样啦!为了增强用户体验,谷歌,甚至百度都很开放了,你可以在他们的网站上找到地图接口 ...
- ASP.NET中调用百度地图API
1.打开链接http://developer.baidu.com/map/jshome.htm这里有很多DEMO,或者你直接百度搜索“百度地图API”,第一个就是.进入后有很多方向供你选择,由于现在开 ...
- 在XAF(ASP.NET)中以ListEditor的形式调用百度地图API
因为项目需要,在系统中使用地图显示设备的地理位置.考虑过ArgGIS,Bing和Baidu地图.本来想用ArgGIS,看教程嫌麻烦.所以还是用Web地图吧.Bing的话还要申请个key,没心情.百度地 ...
- 苹果手机 微信调用百度地图Javascript API 频繁闪退问题
最近在网页中调用百度地图API js大众版,但是在IOS8系统中,缩放的时候频繁闪退,安卓手机没有这个问题! 在网上查询了下,有网友回答说不要频繁的去new marker,而是初始化话一定量的mark ...
- 【c#】Form调用百度地图api攻略及常见问题
首先,在Form中调用百度地图api,我们需要使用webbrowser控件,这个在前面的文章中已经讲过了,可以参照(http://blog.csdn.net/buptgshengod/article/ ...
- Angular/Vue调用百度地图+标注点不显示图标+多标注点计算地图中心位置
整理一下~ 一.在vue中调用百度地图 首先当然是申请百度密匙(很简单,不多说) 1.在index.html文件中引入百度地图JavaScript API接口: <script type=& ...
随机推荐
- extjs ajax请求与struts2进行交互
sencha extjs 5 增加一个struts2的配置,这样可以在设置好前台布局之后,与后台交互获取数据显示.现在有一个问题是struts2对于url的跳转action支 持比较良好,但是对于像E ...
- 基于Html5的移动端开发框架的研究
下面统计信息部分来自网络,不代表个人观点.请大家参考. 基于Html5移动端开发框架调查 序号 框架 简介 优点 缺 ...
- SpringMvc学习心得(五)控制器产生与构建
SpringMvc学习心得(五)控制器产生与构建 标签: springspring mvc框架 2016-03-22 15:29 140人阅读 评论(0) 收藏 举报 分类: Spring(4) ...
- http状态码代表含义
状态代码 状态信息 含义 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转 ...
- [CareerCup] 2.3 Delete Node in a Linked List 删除链表的节点
2.3 Implement an algorithm to delete a node in the middle of a singly linked list, given only access ...
- 第10章 系统级I/O
第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出 ...
- mysql存储过程出参入参,sqlserver很熟悉的一件事到mysql,捣鼓了大半天。记录一下提醒自己。勿看
create PROCEDURE myTestProcname(in score int ,out result varchar(100))BEGINIF score>60 THENset re ...
- IL指令大全
IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执 ...
- 工作的思考十五:升职前需要做的准备(TeamLeader)
当一个人在公司的工作年限以及经验的积累到达一个程度的时候,升职其实是件高兴的事,但面临角色的转变需要提前做些准备的. 其实如果你对你的职业规划很清楚的话,那么你就应该在升职之前就会开始进行角色的转换. ...
- 标准IDispose模式浅析
DoNet资源 众所周知,.Net内存管理分托管资源和非托管资源,把内存中的对象按照这两种资源划分,然后由GC负责回收托管资源(Managed Resource),而对于非托管资源来讲,就需要程序员手 ...