百度地图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


0 0
原创粉丝点击