最近由于比赛的需要,自己学习了一下百度地图的开发。希望以下的内容能够对大家有用。

一、开发前的准备工作:

1、注册百度账号,并登录。(有百度账号的话直接登录)

2、申请Key,地址:http://developer.baidu.com/map/android-mobile-apply-key.htm

注:经研究发现在申请KEY时,应用名称一定要写成my_app_应用名(也就是说"my_app_"是必须要有的)这样,生成的API密钥后面才可用。其他格式的也可以生成API密钥,但是在使用过程中会出问题。(比如:一开始就报授权Key错误,或者使用一段时间后就不行了),当您选择使用v2.1.3及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请,申请及配置流程请参考开发指南对应章节
。(选择使用v2.1.2及之前版本SDK的开发者,申请密钥(Key)的方式不变)。 (特别注意:每一个密钥只能对应这一个android工程,如果另外建工程的话,就需要重新申请密钥)。

二、如何的申请密钥(现在的android版本基本上都是v2.1.3及之后版本的SDK,所以我这里就只说一下v2.1.3及之后版本的SDK之后的申请的密钥)

1、首先登录百度账号。

2、点击上面的申请key的地址。

点击申请新Key。进入界面之后点击创建应用按钮。如图:

安全码的获取,地址:http://developer.baidu.com/map/sdkandev-14.htm 很详细,就不说了。

然后就会获得你的密钥了,

其中  访问应用ak 就是所需要的密钥了。

三、下载SDK(v2.0.0),地址:http://developer.baidu.com/map/sdkandev-download.htm

注:下载Android SDKv2.0.0 (矢量地图版),里面有BaiduMap_AndroidSDK_v2.0.0_Lib.zip、BaiduMap_AndroidSDK_v2.0.0_Docs.zip和BaiduMap_AndroidSDK_v2.0.0_Sample.zip三个压缩包。(在下载的时候会有全部下载和一键下载,注意:请点击
一键下载)。

如图:

四、搭建开发环境,开始The world, hello(世界,你好)之旅:

1、创建android项目,在选SDK时(Choose an SDK to target),选的不是Google APIs,是不带地图服务的SDK

2、在项目创建完毕,在工程里新建libs文件夹,将开发包(BaiduMap_AndroidSDK_v2.2.0_Lib.zip)里的baidumapapi_v2_2_0.jar拷贝到libs根目录下,将libBaiduMapSDK_v2_2_0.so和liblocSDK3.so 拷贝到libs\armeabi目录下,在工程属性->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 . 拷贝完成后的工程目录如下图所示:

五、显示百度地图

1、在AndroidManifest.xml文件中添加使用权限:

<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" />

<permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >

    </permission>

<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >

    </uses-permission>

    <!-- 使用网络功能所需权限 -->

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >

    </uses-permission>

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >

    </uses-permission>

    <uses-permission android:name="android.permission.INTERNET" >

    </uses-permission>

    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >

    </uses-permission>

    <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >

    </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" />

    <uses-permission android:name="android.permission.ACCESS_GPS" />

    <!-- 读取手机的当前状态权限,没有的话会报错,这个是使用百度地图API必须的 -->

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <uses-permission android:name="android.permission.CALL_PHONE" />

    <uses-permission android:name="android.permission.READ_SMS" />

    <uses-permission android:name="android.permission.SEND_SMS" />

    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->

    <uses-permission android:name="android.permission.GET_TASKS" />

    <uses-permission android:name="android.permission.CAMERA" >

    </uses-permission>

    <uses-permission android:name="android.permission.RECORD_AUDIO" >

    </uses-permission>

    <!-- Cache功能需要读写外部存储器,若没这个权限,地图加载不出来 -->

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >

    </uses-permission>

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <uses-permission android:name="android.permission.BROADCAST_STICKY" />

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <!-- 来电消音 -->

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >

    </uses-permission>

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

2、添加对多种屏幕的支持:

<supports-screens

        android:anyDensity="true"

        android:largeScreens="true"

        android:normalScreens="false"

        android:resizeable="true"

        android:smallScreens="true" />

3、在布局xml文件中添加地图控件;

<com.baidu.mapapi.map.MapView

         android:id="@+id/bmapView"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent"

         android:clickable="true"     />

4、在application中添加开发密钥 (这里的“开发者Key”是你申请的密钥)

<application 

    <meta-data 

        android:name="com.baidu.lbsapi.API_KEY" 

        android:value="开发者 key"/> 


</application>

5、MainActivity.java的完整代码和注释     如下:

package com.example.bai;

import com.baidu.mapapi.BMapManager;

import com.baidu.mapapi.MKGeneralListener;

import com.baidu.mapapi.map.MKEvent;

import com.baidu.mapapi.map.MapController;

import com.baidu.mapapi.map.MapView;

import com.baidu.platform.comapi.basestruct.GeoPoint;

import android.os.Bundle;

import android.app.Activity;

import android.widget.Toast;

/*

 * 基本的地图图层,包括若干个缩放级别,显示基本的地图信息,包括道路、街道、学校、公园等内容。

 */

public class MainActivity extends Activity {

 //显示地图的View

 private MapView mMapView = null;

 //地图引擎管理类

 private BMapManager mBMapManager = null;

 /*

  * 经研究发现在申请KEY时:应用名称一定要写成my_app_应用名(也就是说“my_app_”是必须有的)。

  * 百度地图SDK提供的服务是免费的,接口无使用次数限制。您需要先申请密钥(key),才可使用该套SDK。

  */

 public static final String keystring = "Y1Xk5WMZtPXfYLEWqBr7NqQj";

@Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  //注意:请在调用setCOntentView前初始化BManager对象,否则就会报错

  mBMapManager = new BMapManager(getApplicationContext());

  mBMapManager.init(keystring, new MKGeneralListener(){

@Override

   public void onGetNetworkState(int arg0) {

    // TODO Auto-generated method stub

    if(arg0 == MKEvent.ERROR_NETWORK_CONNECT){

     Toast.makeText(MainActivity.this.getApplicationContext(), "您的网络出错了",Toast.LENGTH_LONG).show();

     

    }

    

   }

@Override

   public void onGetPermissionState(int arg0) {

    // TODO Auto-generated method stub

    if(arg0 == MKEvent.ERROR_PERMISSION_DENIED){

     Toast.makeText(MainActivity.this.getApplicationContext(), "请在DemoApplication.java文件输入正确的授权key!", Toast.LENGTH_LONG).show();     

    }

    

   }

   

  });

  setContentView(R.layout.main);

  mMapView = (MapView)this.findViewById(R.id.bmapView);

  //设置启用内置的缩放控件

  mMapView.setBuiltInZoomControls(true);

  //获取地图控制器,可以用它控制平移和缩放

  MapController mMapController = mMapView.getController();

  //用给定的经纬度构造一个GeoPoint,单位是微度(度 * 1E6)

  //纬度值是 31.224078       经度值 121.540419

  GeoPoint mGeoPoint = new GeoPoint((int) (31.224078 * 1E6),(int) (121.540419 * 1E6));

  //设置地图的中心点

  mMapController.setCenter(mGeoPoint);

  //设置地图的缩放级别。这个值得取值范围是[3,18]。

  mMapController.setZoom(13);

  //当前,全国范围内已支持多个城市实时路况查询,且会陆续开通其他城市。

  //在地图中显示实时交通信

  mMapView.setTraffic(true);

  //卫星地图是卫星拍摄的真实的地理面貌,所以卫星地图可用来检测地面的信息,你可以了解地理位置,地形等。

  //显示卫星图,屏掉mMapView.setTraffic(true);这行代码。

  //mMapView.setSatellite(true);

 }

 //重写以下方法,管理API

 protected void onResume(){

  mMapView.onResume();

  if(mBMapManager != null){

   mBMapManager.start();

  }

  super.onResume();

 }

 

 protected void onPause(){

  mMapView.onPause();

  if(mBMapManager != null){

   mBMapManager.stop();

  }

  super.onPause();

 }

 

 protected void onDestroy(){

  mMapView.destroy();

  if(mBMapManager != null){

   mBMapManager.destroy();

   mBMapManager = null;

  }

  super.onDestroy();

 }

 

}

6、效果图如下图:

这是我弄了很长时间才总结出的,希望能够对你有用。



Android开发百度地图(一)--显示基本地图的更多相关文章

  1. 图解android开发在界面上显示图片

    图解android开发在界面上显示图片<申明:转自百度> <原文章地址:http://jingyan.baidu.com/article/49711c6153a277fa441b7c ...

  2. silverlight调用bing地图 和 显示中文地图

    bing地图sdk: https://msdn.microsoft.com/en-us/library/ff428643.aspx 引用dll:https://www.microsoft.com/en ...

  3. 从零开始学android开发- 应用程序窗体显示状态操作requestWindowFeature

    我们在开发程序是经常会需要软件全屏显示.自定义标题(使用按钮等控件)和其他的需求,今天这一讲就是如何控制Android应用程序的窗体显示. 首先介绍一个重要方法那就是requestWindowFeat ...

  4. ArcGIS api for javascript——加入地图并显示当前地图范围

    描述 这个示例使用Map.extent property属性接收地图范围的左下角和右上角坐标 "书签". 使用下列行创建地图: var map = new esri.Map(&qu ...

  5. Android开发-百度地图之电子围栏

    功能实现:根据经纬度创建一个坐标,判断该坐标是否在指定圆形覆盖范围内 两个计算方法,直接套用: /** * 地球半径 */private static double EARTH_RADIUS = 63 ...

  6. android: 在APP中显示高德地图SDK

    一.搭建环境 参考资料:http://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project  ...

  7. Android开发之全屏显示的两种方法

    1.通过修改清单文件中Theme,实现全屏 <application android:name=".MyApplication" android:allowBackup=&q ...

  8. Android开发之仿微信显示更多文字的View

    最近开发需求中要模仿微信朋友圈文章的展开收起功能,网上找了找,发现都有问题,于是乎自己在前辈的基础上进行了一定量的修改,下边将源码贴出来供大家参考:1.主Activity布局文件就不粘贴了,很简单,就 ...

  9. Android开发之使用活动显示对话框

    利用活动显示对话框,需要重写Activity中的onCreateDialog()方法,以此来显示一个对话框窗口. 效果如下: 实现代码如下: package com.example.dialog; i ...

随机推荐

  1. C++中的类所占内存空间总结

    C++中的类所占内存空间总结    最近在复习c++的一些基础,感觉这篇文章很不错,转载来,大家看看! 类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算 ...

  2. hadoop异常: 到目前为止解决的最牛逼的一个异常(java.io.IOException: Incompatible clusterIDs)

    (注意: 本人用的版本为hadoop2.2.0, 旧的版本和此版本的解决方法不同) 异常为: 9 (storage id DS-2102177634-172.16.102.203-50010-1384 ...

  3. 海量数据的二度人脉挖掘算法(Hadoop 实现)

    最近做了一个项目,要求找出二度人脉的一些关系,就好似新浪微博的“你可能感兴趣的人” 中,间接关注推荐:简单描述:即你关注的人中有N个人同时都关注了 XXX . 在程序的实现上,其实我们要找的是:若 U ...

  4. hadoop2.2基准测试

    <hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases的class在新的版 ...

  5. Linux Kernel 本地内存损坏漏洞

    漏洞名称: Linux Kernel 本地内存损坏漏洞 CNNVD编号: CNNVD-201310-663 发布时间: 2013-11-05 更新时间: 2013-11-05 危害等级:    漏洞类 ...

  6. oracle rac scan ip 用途 原理

    Oracle 11G R2 RAC增加了scan ip功能,在11.2之前,client链接数据库的时候要用vip,假如你的cluster有4个节点,那么客户端的tnsnames.ora中就对应有四个 ...

  7. JS模块化规范CommonJS,AMD,CMD

    模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块.理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可.一个模块化系统所必须的 ...

  8. html5 svg 第八章 文字text

    虽然它可能是真实的,每一个画面讲述了一个故事,这是完全正确的,用言语来帮助讲故事.因此,SVG有几个元素,让你将文本添加到您的图形. 文本术语 Text Terminology 在我们调查的主要方法添 ...

  9. Linux中ifreq 结构体分析和使用

    结构原型: struct ifreq{#define IFHWADDRLEN 6 union {  char ifrn_name[IFNAMSIZ];   } ifr_ifrn;  union {   ...

  10. GIS数据格式:Coverage

    转自:http://www.cnblogs.com/w2william/archive/2009/10/15/1583954.html 我之前做了一个模块,基本实现了ArcCatalog中左边树状结构 ...