百度地图API Android SDK开发笔记一入门全过程

搞了几天Google Maps Android API v2,再用百度地图API Android SDK,才发现百度地图真心不错,太好入门了,并且还免费,不像Google 地图,以前的API v1不能申请了,搞了几天老提示This app won't run without Google Play services,which are missing from your phone,安装了服务包还提示This app won't run unless you update Google Play services,太折腾人了,表示还在郁闷中。上午试了哈百度地图,一下下地图就调出来了,与大家分享哈。

一、注册账号,获取key

这个和google有点类似,不过要简单的多,并且也没有使用限次,据说是免费的。

进入百度开发者中心http://developer.baidu.com/,注册个账号,安要求做OK。在主页点百度地图API,接着在下面些点Android SDK,开始百度地图Android SDK开发。获取密钥,申请key简单描述哈,就可以生成API密钥,记下这个以后程序会用到。

二、新建AVD模拟器

AVD Name:em233
Device:3.2'' HVGA
Target:Android 2.3.3(API level 10)剩下的默认即可,接着选择新建的AVD,start接着Launch就开启AVD了,开启时间有点长,一般开了就不关。不管它下面新建Android工程

三、新建Android Application Project

File->New->Android Application Project,创建自己的工程,我的如下:

Application Name:mapsbase
Porject Name:mapsbase
Package Name: com.example.mapsbase

Minimum Required SDK:API 10:Android 2.3.3(Gingerbread)
Target SDK:API 10:Android 2.3.3(Gingerbread)
Compile With:API 10:Android 2.3.3(Gingerbread)
Theme:None

剩下的Next保持默认不变,Finish就OK。下面仿照官方编写代码http://developer.baidu.com/map/sdkandev-2.htm ,我完全按官方的来发现编译通不过,就仿照给的例子修改。其中用到的库在官方网站上都有下的,在相关下载下BaiduMap_AndroidSDK_v2.1.1_Lib.zip、BaiduMap_AndroidSDK_v2.1.1_Sample.zip即可。

1.添加库、设置工程属性

将下载的库添加到新建工程中。在左边Package Explore,mapsbase工程libs目录下新建armeabi文件夹。接着把下载的baidumapapi_v2_1_1.jar、locSDK_3.1.jar拖到libs目录,libapp_BaiduMapApplib_v2_1_1.so、libvi_voslib.so 和liblocSDK3.so拖到刚刚建的armeabi目录。接着在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_v2_1_1.jar,确定后返回。通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

2.编写代码

先写个最基础的测试程序,能正常显示地图,并能放大缩小,我的代码如下:

根目录下AndroidMainfest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapsbase"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
 
		<activity android:name=".MapDemo"
        android:screenOrientation="sensor"
        android:configChanges="orientation|keyboardHidden">
		</activity>
        <activity
            android:name="com.example.mapsbase.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
<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.ACCES_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" />
    <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>
    <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" />

<supports-screens 
    	android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:resizeable="true"
        android:anyDensity="true"/>

</manifest>

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="hello world" />
        <com.baidu.mapapi.map.MapView android:id="@+id/bmapsView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:clickable="true" />
</LinearLayout>

src/com.example.mapsbase/MainActivity.java:

package com.example.mapsbase;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.Menu;
import android.widget.FrameLayout;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.MKMapViewListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;

public class MainActivity extends Activity {
	BMapManager mBMapMan = null;
	MapView mMapView = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mBMapMan=new BMapManager(getApplication());
		mBMapMan.init("你申请的key", null);  
		//注意:请在试用setContentView前初始化BMapManager对象,否则会报错
		setContentView(R.layout.activity_main);
		mMapView=(MapView)findViewById(R.id.bmapsView);
		mMapView.setBuiltInZoomControls(true);
		//设置启用内置的缩放控件
		MapController mMapController=mMapView.getController();
		// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
		GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));
		//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
		mMapController.setCenter(point);//设置地图中心点
		mMapController.setZoom(12);//设置地图zoom级别
	}
	@Override
	protected void onDestroy(){
	        mMapView.destroy();
	        if(mBMapMan!=null){
	                mBMapMan.destroy();
	                mBMapMan=null;
	        }
	        super.onDestroy();
	}
	@Override
	protected void onPause(){
	        mMapView.onPause();
	        if(mBMapMan!=null){
	                mBMapMan.stop();
	        }
	        super.onPause();
	}
	@Override
	protected void onResume(){
	        mMapView.onResume();
	        if(mBMapMan!=null){
	                mBMapMan.start();
	        }
	        super.onResume();
	}

}

代码就OK了,看看AVD也打开了下面测试
四.编译、测试

Project/Build all,修改直至无误,上面的程序在我机子上编译是OK的。开始测试吧,点DDMS看有没有发现模拟器设备,没有就Reset adb下,等发现设备后开始运行。右击工程属性选Run As/Android Application.开始运行,在Console/Android 就可以看到如下加载信息

[2013-05-14 15:15:13 - mapsbase] ------------------------------
[2013-05-14 15:15:13 - mapsbase] Android Launch!
[2013-05-14 15:15:13 - mapsbase] adb is running normally.
[2013-05-14 15:15:13 - mapsbase] Performing com.example.mapsbase.MainActivity activity launch
[2013-05-14 15:15:16 - mapsbase] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'em233'
[2013-05-14 15:15:19 - mapsbase] Application already deployed. No need to reinstall.
[2013-05-14 15:15:19 - mapsbase] Starting activity com.example.mapsbase.MainActivity on device emulator-5554
[2013-05-14 15:15:22 - mapsbase] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.mapsbase/.MainActivity }
就可以看到AVD上显示地图了,以后再一步步完善,当然google地图也要继续,到时候再对比。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值