版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/yanglfree/article/details/33333413

一、概述

最新版的百度地图SDK3.0,改动了非常多方法,之前的非常多方法被简化了,正好在做地图这一块,顺便就使用了最新版的sdk。

下载官方给的demo,发现变化还是挺大的,之前的一些方法都换了,地图的初始化也进行了调整。多了好几个类,具体使用方法參考以下的样例。具体的说明可參照官方的说明文档。

二、效果图

标注覆盖物效果图:

弹出窗覆盖物:

三、实现过程

大部分是依据官方给的demo来的。

A、配置文件:

 第一步:在project里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar复制到libs根文件夹下。将libBaiduMapSDK_vX_X_X.so复制到libs\armeabi文件夹下(官网demo里已有这两个文件,假设要集成到自己的project里,就须要自己加入)。拷贝完毕后的project文件夹例如以下图所看到的。

    注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发人员可依据实际需求自行加入。

    第二步:在project属性->Java Build Path->Libraries中选择“Add External JARs”。选定baidumapapi_vX_X_X.jar,确定后返回。

    通过以上两步操作后,您就能够正常使用百度地图SDK为您提供的所有功能了。

注意:因为adt插件升级,若您使用Eclipse adt 22的话。须要对开发环境进行对应的设置,方法例如以下:

1. 在Eclipse 中选中project,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态。

2. Project -> clean-> clean all .

B、在AndroidManifest中加入开发密钥、所需权限等信息;

<application
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发人员 key" />
</application>

C、加入一些对应的权限

<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" />
<ses-permission android:name="android.permission.READ_PHONE_STATE" />

D、在布局文件里,加入百度地图的自己定义控件

  <com.baidu.mapapi.map.MapView
android:id="@id/mapview_baidu_address"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

E、在应用程序创建时初始化 SDK引用的Context 全局变量

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息。传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}

注意:在SDK各功能组件使用之前都须要调用

SDKInitializer.initialize(getApplicationContext());。因此我们建议该方法放在Application的初始化方法中

F、创建地图Activity 

不同之前的版本号。3.0版的sdk中,mapview对象须要先获取BaiduMap对象才干由BaiduMap对象进行兴许的加入覆盖物的操作。

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
setContentView(R.layout.d1_activity_address);
super.onCreate(savedInstanceState);
mMapView = (MapView) findViewById(R.id.mapview_baidu_address);
mBaiduMap = mMapView.getMap();//获取BaiduMap类 BaiduMap类才干够加入自己定义的图层
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f);//设置地图的缩放比例
mBaiduMap.setMapStatus(msu);//将前面的參数交给BaiduMap类 initOverLay(latitude, longitude);// 绘制图层
showPop();// 弹出popup
}

管理地图生命周期

	@Override
protected void onPause() {
// MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
mMapView.onPause();
super.onPause();
} @Override
protected void onResume() {
// MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()
mMapView.onResume();
super.onResume();
} @Override
protected void onDestroy() {
// MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
if (mMapView!=null) {
mMapView.onDestroy();
mMapView = null;
}
// 回收 bitmap 资源
bitmap.recycle();
}

当中绘制覆盖物,也就是图层的方法代码例如以下:

LatLng这个类 官方文档的说明是:地理坐标基本数据结构

	public void initOverLay(double latitude, double longitude) {
// 定义Maker坐标点
LatLng ll = new LatLng(latitude, longitude);
// 构建Marker图标
BitmapDescriptor bd1 = BitmapDescriptorFactory
.fromResource(R.drawable.pin_green);
// 构建MarkerOption,用于在地图上加入Marker
OverlayOptions option = new MarkerOptions().position(ll).icon(bd1);
// 在地图上加入Marker,并显示
mBaiduMap.addOverlay(option);//加入当前分店信息图层
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.setMapStatus(u);
}

弹出窗覆盖物  点击覆盖物。弹出导航选择列表

	public void showPop() {
// 创建InfoWindow展示的view
View popup = View.inflate(this, R.layout.pop, null);
TextView title = (TextView) popup.findViewById(R.id.tv_title);
TextView content = (TextView) popup.findViewById(R.id.tv_content);
title.setText(name);
content.setText(addr); // 定义用于显示该InfoWindow的坐标点
LatLng pt = new LatLng(latitude, longitude);
// Point p = mBaiduMap.getProjection().toScreenLocation(pt);
// 创建InfoWindow的点击事件监听者
OnInfoWindowClickListener listener = new OnInfoWindowClickListener() {
public void onInfoWindowClick() {
// 加入点击后的事件响应代码
Uri uri = Uri.parse("geo:" + latitude + "," + longitude + "");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
};
// 创建InfoWindow
InfoWindow mInfoWindow = new InfoWindow(popup, pt, listener);
// 显示InfoWindow
mBaiduMap.showInfoWindow(mInfoWindow);
}

弹出框pop布局

<?xml version="1.0" encoding="utf-8"?

>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/ic_map_marker" > <LinearLayout
android:id="@+id/ll_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginTop="10dip"
android:orientation="vertical" > <TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:ellipsize="end" />
<TextView
android:id="@+id/tv_content"
android:layout_width="300dip"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:ellipsize="end"
android:textColor="@color/black"
android:textSize="12sp" />
</LinearLayout>
<!--
<ImageView
android:id="@+id/iv_navi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dip"
android:layout_toRightOf="@+id/ll_text"
android:background="@drawable/ic_arrow_right" />
-->
</LinearLayout>

四、总结

利用百度地图sdk开发的几个步骤:

1、导入jar包和so文件

2、布局文件里加入百度地图控件。manifest清单文件里,加入响应的权限,application节点下加入key

3、主activity中setContentView之前加入SDKInitializer.initialize(getApplicationContext());进行初始化

4、得到地图mapView对象。然后进行其它操作

5、生成覆盖物(见上面的代码)

6、生成弹出窗覆盖物 (见上面的代码)

转载请注明出处  http://blog.csdn.net/csr_yang/article/details/33333413



Android应用之——百度地图最新SDK3.0应用,实现最经常使用的标注覆盖物以及弹出窗覆盖物的更多相关文章

  1. vue 百度地图实现标记多个maker,并点击任意一个maker弹出对应的提示框信息, (附: 通过多个地址,标记多个marker 的 方法思路)

    通过点击不同筛选条件,筛选出不同企业所在的地点, 根据每个企业的经纬度 在地图上标记多个maker,点击任意一个maker,会弹出infoWindow 信息窗口: 说明:  因每个人写法不同.需求不同 ...

  2. android使用百度地图最新sdk5.0后后代码混淆时,地图无法显示闪退问题

    描述:刚开始遇到这个问题我一步一步去排除,最后发现在初始化地图的时候,代码混淆就有问题了, 问题描述:当跳显示地图的页面APP闪退, 解决对比: 1:对于老版本百度sdk:代码混淆时语句: -libr ...

  3. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  4. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  5. Android 百度地图 SDK v3.0.0 (一)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...

  6. Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  7. Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易 ...

  8. [置顶] Xamarin android如何调用百度地图入门示例(一)

    在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...

  9. Android Studio使用百度地图示例BaiduMapsApiASDemo

    Android Studio使用百度地图示例BaiduMapsApiASDemo 用自己AVD下的debug.keystore替换掉项目中的debug.keystore 生成自己的签名 同样的方法生成 ...

随机推荐

  1. 【摘抄】C++程序员练级攻略

    摘抄自互联网文章 作为C++程序员,或者说程序员一定要提升自己: 专访李运华:程序员如何在技术上提升自己-CSDN.NET专访徐宜生:坚决不做代码搬运工!-CSDN.NET 上面两个文章我觉得都不错. ...

  2. iOS 9: UIStackView入门

    本文转自http://www.cocoachina.com/ios/20150623/12233.html 本文由CocoaChina译者candeladiao翻译,欢迎参加我们的翻译活动.原文:iO ...

  3. 某MDU产品OMCI软件升级加速方案

    说明 本文基于某GPON MDU产品的当前情况,提出OMCI升级的加速方案. 因时间仓促和水平限制,文中难免存在错漏和不足之处,敬请指正. 一  问题提出 根据G.988标准相关描述,软件升级过程可分 ...

  4. 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)

    行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...

  5. [原]openstack-kilo--issue(三) openstack-nova-issue-systemctl start openstack-nova-compute.service

    本博客已经添加"打赏"功能,"打赏"位置位于右边栏红色框中,感谢您赞助的咖啡. execute systemctl start openstack-nova-c ...

  6. sphinx配置文件详解

    sphinx的配置文件是在配置的时候最容易出错的了: 我们先要明白几个概念: source:数据源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构建索引.索引实际上就是相当于一 ...

  7. 调用TerminateProcess是无法触发DLL_PROCESS_DETACH的

    当应用程序中调用TerminateProcess函数,对于在DllMain函数中处理DLL_PROCESS_DETACH的额外代码操作是无法被执行的.比如:释放资源.数据持久化等.

  8. netstat命令的安装

    yum -y install net-tools    (可以生成ifconfig命令,netstat命令)

  9. 几个解决k染色问题的指数级做法

    几个解决k染色问题的指数级做法 ——以及CF908H题解 给你一张n个点的普通无向图,让你给每个点染上k种颜色中的一种,要求对于每条边,两个端点的颜色不能相同,问你是否存在一种可行方案,或是让你输出一 ...

  10. Mavlink - 无人机通讯协议

    http://qgroundcontrol.org/mavlink/start mavlink协议介绍https://pixhawk.ethz.ch/mavlink/ 消息简介 MAVLink简介 M ...