Android开发百度地图(一)--显示基本地图

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

一、开发前的准备工作:

      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、效果图如下图:

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值