百度地图v3.6.1接入1--基本地图功能
来源:互联网 发布:linux怎么复制文件内容 编辑:程序博客网 时间:2024/06/10 04:10
学习代码来自百度开放平台 官方demo点击下载
实现目标:从一个地图小白,变成可实现地图接入【创建一张百度地图并管理地图的生命周期】
实现效果:
(一):申请开发Key
在我们使用百度地图之前,首先我们需要去BaiduMapSdK官方网站中申请key(地址为:http://lbsyun.baidu.com/apiconsole/key)。. 1:查看应用的安全码。使用Eclipse直接查看: winows -> preferance-> android -> build
2:将安全码和包名填入到官网要创建应用的相应位置
(二)下载SDK
我们要使用Baidu地图开发,我们首先要去下载开发sdk库,下载地址:http://developer.baidu.com/map/sdkandev-download.htm要注意的是这里使用的v3.6.1,下面是主要更新
1、自v3.6.0起,官网不再支持地图离线包下载,所以SDK去掉“手动导入离线包接口”,SDK在线下载离线包接口仍维持不变。
2、因为新版采用新的分包形式,旧包无法与新包同时混用,请将之前所有旧包(so和jar)全部替换为新包。
3、自V3.6.0起,Android SDK使用新的矢量地图样式,地图显示更加清新,和百度地图客户端保持一致。
4、自V3.6.0起,原内置覆盖物相关类代码开源(OverlayManager/PoiOverlay/TransitRouteOverlay/WalkingRouteOverlay/BusLineOverlay),源码可在BaiduMapsApiDemo工程中找到。
5、自V3.6.0起,Android SDK采用功能包拆分的形式,其中:
baidumapapi_base_vX_X_X.jar和libBaiduMapSDK_base_vX_X_X.so为基础包,使用地图、检索、云检索、工具、周边雷达中任何一功能都必须包含;
baidumapapi_map_vX_X_X.jar和libBaiduMapSDK_map_vX_X_X.so为地图功能包;
baidumapapi_search_vX_X_X.jar和libBaiduMapSDK_search_vX_X_X.so为检索功能包;
baidumapapi_cloud_vX_X_X.jar和libBaiduMapSDK_cloud_vX_X_X.so为云检索功能包;
baidumapapi_util_vX_X_X.jar和libBaiduMapSDK_util_vX_X_X.so为工具功能包;
baidumapapi_radar_vX_X_X.jar和libBaiduMapSDK_radar_vX_X_X.so为周边雷达工具包;
如果您从http://lbsyun.baidu.com/sdk/download这里下载的开发包,提供给您的将所有jar打包成BaiduLBS_Android.jar。native动态库so的形式不变。
(三)下面创建项目,来显示初步的显示一下百度地图:
1.下载上面lib包,创建demo项目把jar和.so文件引入进去如下: 2.自定义Applicaiton,设置全局变量
package com.example.testbdmaplocation;import android.app.Application;import com.baidu.mapapi.SDKInitializer;public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContextSDKInitializer.initialize(this);}}
2:BMapApiDemoMain.java实现key的验证:
package com.example.testbdmaplocation;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.graphics.Color;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.VersionInfo;public class BMapApiDemoMain extends Activity {private static final String LTAG = BMapApiDemoMain.class.getSimpleName();/** * 构造广播监听类,监听 SDK key 验证以及网络异常广播 */public class SDKReceiver extends BroadcastReceiver {public void onReceive(Context context, Intent intent) {String s = intent.getAction();Log.d(LTAG, "action: " + s);TextView text = (TextView) findViewById(R.id.text_Info);text.setTextColor(Color.RED);if (s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {text.setText("key 验证出错! 请在 AndroidManifest.xml 文件中检查 key 设置");} else if (s .equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) { text.setText("key 验证成功! 功能可以正常使用"); text.setTextColor(Color.YELLOW);}else if (s.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {text.setText("网络出错");}}}private SDKReceiver mReceiver;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);TextView text = (TextView) findViewById(R.id.text_Info);text.setTextColor(Color.YELLOW);text.setText("欢迎使用百度地图Android SDK v" + VersionInfo.getApiVersion());ListView mListView = (ListView) findViewById(R.id.listView);// 添加ListItem,设置事件响应mListView.setAdapter(new DemoListAdapter());mListView.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> arg0, View v, int index,long arg3) {onListItemClick(index);}});// 注册 SDK 广播监听者IntentFilter iFilter = new IntentFilter();iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);mReceiver = new SDKReceiver();registerReceiver(mReceiver, iFilter);}void onListItemClick(int index) {Intent intent = null;intent = new Intent(BMapApiDemoMain.this, demos[index].demoClass);this.startActivity(intent);}private static final DemoInfo[] demos = { new DemoInfo(R.string.demo_title_basemap, R.string.demo_desc_basemap, BaseMapDemo.class), };@Overrideprotected void onResume() {super.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();// 取消监听 SDK 广播unregisterReceiver(mReceiver);}private class DemoListAdapter extends BaseAdapter {public DemoListAdapter() {super();}@Overridepublic View getView(int index, View convertView, ViewGroup parent) {convertView = View.inflate(BMapApiDemoMain.this,R.layout.demo_info_item, null);TextView title = (TextView) convertView.findViewById(R.id.title);TextView desc = (TextView) convertView.findViewById(R.id.desc);title.setText(demos[index].title);desc.setText(demos[index].desc);if (index >= 16) {title.setTextColor(Color.YELLOW);}return convertView;}@Overridepublic int getCount() {return demos.length;}@Overridepublic Object getItem(int index) {return demos[index];}@Overridepublic long getItemId(int id) {return id;}}private static class DemoInfo {private final int title;private final int desc;private final Class<? extends android.app.Activity> demoClass;public DemoInfo(int title, int desc,Class<? extends android.app.Activity> demoClass) {this.title = title;this.desc = desc;this.demoClass = demoClass;}}}3:BaseMapDemo.java实现演示MapView的基本用法及地图的创建
package com.example.testbdmaplocation;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BaiduMapOptions;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.model.LatLng;/** * 演示MapView的基本用法 */public class BaseMapDemo extends Activity {@SuppressWarnings("unused")private static final String LTAG = BaseMapDemo.class.getSimpleName();private MapView mMapView;private BaiduMap mBaiduMap;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent();if (intent.hasExtra("x") && intent.hasExtra("y")) {// 当用intent参数时,设置中心点为指定点Bundle b = intent.getExtras();LatLng p = new LatLng(b.getDouble("y"), b.getDouble("x"));mMapView = new MapView(this,new BaiduMapOptions().mapStatus(new MapStatus.Builder().target(p).build()));} else {mMapView = new MapView(this, new BaiduMapOptions());}setContentView(mMapView);mBaiduMap = mMapView.getMap();}@Overrideprotected void onPause() {super.onPause();// activity 暂停时同时暂停地图控件mMapView.onPause();}@Overrideprotected void onResume() {super.onResume();// activity 恢复时同时恢复地图控件mMapView.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();// activity 销毁时同时销毁地图控件mMapView.onDestroy();}}
4:加入权限配置:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testbdmaplocation" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:name="com.example.testbdmaplocation.DemoApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:hardwareAccelerated="true" > <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="HMA42siusR667AOHmeE70m6y" /> <activity android:name=".BMapApiDemoMain" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".BaseMapDemo" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait" android:label="@string/demo_name_basemap" > </activity> <!-- MapSettingStart --> <!-- key --> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? --> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 这个权限用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!-- 这个权限用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!-- 获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!-- 用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><!-- 访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET" /><!-- SD卡读取权限,用户写入离线定位数据--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission><!--允许应用读取低级别的系统日志文件 --><uses-permission android:name="android.permission.READ_LOGS"></uses-permission> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="false" android:resizeable="true" android:smallScreens="true" /> <!-- MapSettingEnd --></manifest>
(四):代码中实现百度地图用的几个类简要说明:
1:在自定义Application中实现SDK组件初始化时,记得在xml的配置文件中加上声明2:通过注册广播的方式监听SDKInitializer的状态来确定key的状态
3:MapView:一个显示地图的视图,当被焦点选中时,它能捕获按键事件和触摸手势去平移和缩放地图。MapView的创建可以使用在XML布局的方式创建,也可以使用构建函数创建。MapView的生命周期需要与Activity同步,即需要在Activity.onPause中调用onPause()
, 在Activity.onResume中调用onResume()
,在Activity.onDestroy中调用destory();
(五):点击下载demo
- 百度地图v3.6.1接入1--基本地图功能
- 百度地图v3.6.1接入2--初略概括
- 百度地图 SDK v3.6.1——基本地图+控制
- 百度地图V3.0基本操作
- 百度地图v3.5 地图定位和封装定位功能
- 接入百度地图
- 百度地图接入注意
- Android 接入百度地图
- 百度地图V3.1删除折线
- Android--百度地图定位功能的具体实现<百度地图SDK版本 v3.7.3>
- android 百度地图支付接入
- ios百度地图接入流程
- Unity接入百度地图SDK
- Unity接入百度地图SDK
- 使用ionic2接入百度地图
- php 百度地图api接入
- 接入百度地图授权状态
- 百度地图之基本地图
- Mysql学习之cannot add foreign key constraint
- NSLogger使用
- ref 和out以及params参数详解
- 通用的自定义BaseActivity类,集成多种基本功能
- Webdriver Ui自动化测试,使用工厂方法生产不同浏览器的webdriver实例
- 百度地图v3.6.1接入1--基本地图功能
- CentOS7.1下python2.7.10安装PyQt4
- #import和@class的区别
- Java 调用构造器会不会一定产生新对象
- iOS文件目录结构
- 日志系统设计(一)&(二)
- maven pom.xml详解
- Redis中的事务
- centos6.5下docker学习笔记