百度地图:第一篇HelloWorld

时间:2022-07-29 09:10:47

1、百度开发Key的获取,声明一个接口,将该Key放进去
地址:
http://developer.baidu.com/map/android-mobile-apply-key.htm
百度开发者平台
申请Key教程
开发指南/配置教程
百度地图:第一篇HelloWorld
API Key:1A4A4ABEFBEECD8C17DEE880C4EA69B9607020B5

CanstantValue.java

package huaxa.it.map;

import android.R.string;

/** * @项目名: BaiduMap * @包名: huaxa.it.map * @类名: CanstantValue * @创建者: 黄夏莲 * @创建时间: 2016年11月28日 ,上午11:35:23 * * @描述: TODO */
public interface CanstantValue {
    String  KEY = "1A4A4ABEFBEECD8C17DEE880C4EA69B9607020B5";
}

2、添加引擎到Andoid工程中
添加jar包:baidumapapi_v2_1_2.jar和locSDK_3.1.jar
添加.so文件:拷贝libapp_BaiduMapApplib_v2_1_2.so、liblocSDK3.so、libvi_voslib.so到libs\armeabi目录下
注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。
百度地图:第一篇HelloWorld
3、在Manifest.xml声明使用权限

声明使用权限
<!-- 这个权限用于进行网络定位-->
<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>

4、实现一个helloworld项目:
此处用到3个类:BMapManager 、MapView 、MapController
1. 实现布局。
2. 在setContentView()之前执行KEY校验。此中需要查看SDK的index.xml帮助文档,查看各个类的功能。
3. 实现缩放功能,添加缩放控件。
4. 设置地图中心点。
实现如下:

HelloWorld.java

package huaxa.it.map;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

/** * @项目名: BaiduMap * @包名: huaxa.it.map * @类名: HelloWorld * @创建者: 黄夏莲 * @创建时间: 2016年11月28日 ,下午12:09:53 * * @描述: TODO */
public class HelloWorld extends Activity {
    private BMapManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // KEY的校验
        initManager();
        setContentView(R.layout.common);
    }

    /** * 初始化地图引擎 */
    private void initManager()
    {
        manager = new BMapManager(getApplicationContext());

        /** * public boolean init(String strKey, MKGeneralListener listener) 参数: * strKey - 申请的授权验证码 listener - * 注册回调事件,该接口返回网络状态,授权验证等结果,用户需要实现该接口以处理相应事件 */
        // KEY的校验
        manager.init(CanstantValue.KEY, new MKGeneralListener()
        {
            //MKEvent存放常量

            @Override
            public void onGetPermissionState(int iError)
            {
                // TODO 授权验证
                if(iError == MKEvent.ERROR_PERMISSION_DENIED)
                {
                    Toast.makeText(getApplicationContext(), "授权验证失败", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onGetNetworkState(int iError)
            {
                // TODO 网络状态
                if(iError == MKEvent.ERROR_NETWORK_CONNECT)
                {
                    Toast.makeText(getApplicationContext(), "网络无连接", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

}

common.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

    <com.baidu.mapapi.map.MapView  android:id="@+id/MapView" android:layout_width="match_parent" android:layout_height="match_parent" />

</LinearLayout>

Manifest.xml

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

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

    <!-- gps -->
    <!-- 这个权限用于进行网络定位 -->
    <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>

    <application  android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >

<!-- <activity android:name=".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> -->
        <activity  android:name=".HelloWorld" 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>

</manifest>

实现结果:校验失败:
改正方法:http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=106461
实现效果:
百度地图:第一篇HelloWorld
实现缩放功能:
HelloWorld.java

package huaxa.it.map;

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.app.Activity;
import android.location.Geocoder;
import android.os.Bundle;
import android.widget.Toast;

/** * @项目名: BaiduMap * @包名: huaxa.it.map * @类名: HelloWorld * @创建者: 黄夏莲 * @创建时间: 2016年11月28日 ,下午12:09:53 * * @描述: TODO */
public class HelloWorld extends Activity {
    private BMapManager     manager;
    private MapController   controller;
    private MapView         mapView;

    private int             latitude    = (int) (23.039 * 8E6);//经度
    private int             longitude   = (int) (113.4042E6);//纬度
    private GeoPoint        geoPoint    = new GeoPoint(latitude, longitude);//广东工业大学坐标

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // KEY的校验
        initManager();
        setContentView(R.layout.common);

        init();
    }

    private void init()
    {
        // 地图的缩放级别(版本V2.X:3-19,V1.X:3-18级放大)
        // V2.X与V1.X的主要区别:
        // ①修改了地图文件的格式(节省了空间)
        // ②放大级别,增加3D(18、19)的特效

        // MapController管理某个具体的MapView,缩放、旋转、移动
        mapView = (MapView) findViewById(R.id.MapView);
        controller = mapView.getController();
        controller.setZoom(12);// 设置地图的缩放级别。 这个值的取值范围是[3,19]。
        mapView.setBuiltInZoomControls(true);// 设置是否启用内置的缩放控件。
                                                // 如果启用,MapView将自动显示这些缩放控件。
        controller.setCenter(geoPoint);//设置地图中心点
    }

    /** * 初始化地图引擎 */
    private void initManager()
    {
        manager = new BMapManager(getApplicationContext());

        /** * public boolean init(String strKey, MKGeneralListener listener) 参数: * strKey - 申请的授权验证码 listener - * 注册回调事件,该接口返回网络状态,授权验证等结果,用户需要实现该接口以处理相应事件 */
        // KEY的校验
        manager.init(CanstantValue.KEY, new MKGeneralListener()
        {
            // MKEvent存放常量

            @Override
            public void onGetPermissionState(int iError)
            {
                // TODO 授权验证
                if (iError == MKEvent.ERROR_PERMISSION_DENIED)
                {
                    Toast.makeText(getApplicationContext(),
                            "授权验证失败" + MKEvent.ERROR_PERMISSION_DENIED,
                            Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onGetNetworkState(int iError)
            {
                // TODO 网络状态
                if (iError == MKEvent.ERROR_NETWORK_CONNECT)
                {
                    Toast.makeText(getApplicationContext(), "网络无连接",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

}