Android应用之——百度地图最新SDK3.0应用,实现最常用的标注覆盖物以及弹出窗覆盖物

一、概述

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

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

二、效果图

标注覆盖物效果图:

弹出窗覆盖物:

三、实现过程

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

A、配置文件:

第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;

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

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

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

注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:

1. 在Eclipse 中选中工程,右键选 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);
	}

四、总结

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

1、导入jar包和so文件

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

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

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

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

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



Android应用之——百度地图最新SDK3.0应用,实现最常用的标注覆盖物以及弹出窗覆盖物,布布扣,bubuko.com

时间: 2024-12-16 08:48:36

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

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

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

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SDK,当前的版本:Android SDK v3.0.0 . 虽然百度地图网上相关代码比较多,大多可能都是比较旧的版本,且百度地图API的改动感觉也比较大,所以再此跟大家分享一下一天的劳动成功. 下面简单展示下,博客中会介绍的功能: 1.功能介绍 a.首先肯定是导入地图,然后就是地图模式的一些切换,普通

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

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易,且用且珍惜. 对于官方开发指南对于离线地图的教程,提供了两种方案: 第一,手动导入,先将从官网下载的离线包解压,把vmp文件夹拷入SD卡根目录下的BaiduMapSDK文件夹内.好吧,我表示不能接受,无视了. 第二,接口下载方法如下:mOffline.start(cityid);还比较靠谱,就是没详

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

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易.且用且珍惜. 对于官方开发指南对于离线地图的教程,提供了两种方案: 第一.手动导入,先将从官网下载的离线包解压,把vmp目录拷入SD卡根目录下的BaiduMapSDK目录内. 好吧,我表示不能接受,无视了. 第二,接口下载方法例如以下:mOffline.start(cityid);还比較靠谱,就是

百度地图3.1.0(一)Hello BaiduMap

1:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下 如图所示: 2:在AndroidManifest中添加开发密钥.所需权限等信息 1 <application 2 <meta-data 3 android:name="com.baidu.lbsapi.API_KEY" 4 android:value="开发者 key

Xamarin.Android之使用百度地图起始篇

一.前言 如今跨平台开发层出不穷,而对于.NET而言时下最流行的当然还是Xamarin,不仅仅能够让我们在熟悉的Vs下利用C#开发,在对原生态类库的支持方面也有着非常的好支持,今天我们将会以百度地图类库来介绍如何实用第三方原生态类库. 二.正文 笔者采用的是3.0.0的版本,需要以下文件: baidumapapi_v3_0_0.jar libBaiduMapSDK_v3_0_0.so 1.新建项目 2.将baidumapapi_v3_0_0.jar赋值到Jars文件夹下 3.修改其属性 4.如果

百度地图3.1.0(二)基于MapFragment的基本地图

基于Fragment的百度Map也很简单 直接看例子吧: AndroidManifest.xml的配置: 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.testbaidu_v_3_1" 4

【智能手环APP for Android 】01 百度地图展示行动轨迹

1.效果图示 2.行动轨迹数据 <span style="font-size:18px;">[ { "LocationX":"121.42619", "LocationY":"31.186655" }, { "LocationX":"121.42694", "LocationY":"31.187215" }, { &

Android Studio调用百度地图为何总是初始化失败?

============问题描述============ Android Studio调用百度地图为何总是初始化失败? 只要一调用,就黑屏,然后程序自动关闭?请问是什么原因,libs我也加.jar文件了 ============解决方案1============ 怎么加?只是加个包?没写其他了? ============解决方案2============ 布局写了么.. ============解决方案3============ 运行在真机?还是模拟器? ============解决方案4===