01、环境配置

这是腾讯的地图,如果你去用它的SDK它不会有这些图标的.它是为滴滴打车专门定制的这套东西.显示一些标志物,点一下能弹出相应的信息.

团购会有电影院的地址.地址的话我们看完之后还不知道怎么走.对它的印象也不是很深,你直接看可能对它不会有什么印象也不知道它在哪儿.

显示了一个二维的地图.然后还有放大缩小,左下角还有比例尺.比例尺它就显示了你当前在地球上这一段位置代表多远的一个距离.比如这一段长度代表的是500米,放大一下,这一段长度呢它代表的距离就小一点了,变成两百米了.如果你放的很大的话,它代表的距离会很小,10米.这个10米就说代表你在这地图上真实的一小段长度呢它就代表的是10米.

地图图层分类,可以切换成这个卫星地图.还有这个2D的一个地图.还有一个是交通图,交通图是用于显示我们这个交通路况的.比如说哪个地方拥堵啊,哪个地方比较畅通.

标志覆盖物是今天的一个重点.

学习第三方的SDK,有两种方式,一种是你直接看它的开发文档,也就是它的demo,它的小demo,你可以把它运行起来.

Android Tools->Fix Project Properties.


大多数这种第三方开发的SDK它都会需要一个Key.那这个Key怎么申请呢?看开发文档.

SHA1就是加密的一串字符串.跟我们的那个MD5一样,MD5它也是属于签名中的一种.这个SHA1是通过哈希算法算出来的.它比MD5要更加的严谨.


获取安全码:

一定要对着你这个安卓虚拟设备来找,因为有些人呢他可能在自己电脑配了两个SDK,两个SDK,那具体你这个Eclipse运行的时候他用的是哪一个SDK呢,那你就点一下这里,以这个为准.

要取这个debug.keystore的一个签名.这个是我们Eclipse默认运行apk的时候呢它用这个debug.keystore来签名的.它的密码默认是android.

只要你的电脑没换,Eclipse没换,那不论你打多少次这个命令,它的签名都会一模一样.最后生成的这个百度地图的Key,只能,如果说我是在我这里面通过这个指纹生成的,那只能在我的电脑里面去用,在你的电脑是用不了的.你们只能自己去再申请一个.

还需要一个包名,这个包名指的是我们清单文件AndroidManifest.xml里面的包名.进程会以这个指定的这个包名作为它进程的名字.

如果你用这个/BaiduMapsApiDemo/src/baidumapsdk.demo包名有点危险,因为我这里指定的这个包名可以跟这个/BaiduMapsApiDemo/src/baidumapsdk.demo完全不相同都是可以的.就是说我们最好是从/BaiduMapsApiDemo/AndroidManifest.xml这里面去选.


这个Key:3vPbgj0GeoFkyuaoL3HmRBVhLcagPt7p只能在我机器上运行它就没问题,因为我们生成这个key的时候呢是需要一个签名的,这个签名的话呢每个人在自己的电脑呢拿到的签名都不一样,所以这个Key呢你们只能自己去再申请一个.

这个项目运行会比较慢,因为这里面会有很多的.so库.这个就是通过JNI去调用.编译这些库花的时间会比较多.

如果说你这个Key是不对的,比如说你打错了一个字符,那这个地图它是不会显示出来的,它是不会给你提供这个地图服务的.


我们想自己去搭建开发环境,这个demo呢人家把环境都搭建好了,就是缺了一个Key而已.


那我们还是从0开始搭建这个开发环境.

配置环境及发布

armeabi是CPU的架构,最开始的时候这个百度地图只支持armeabi这个CPU的架构.现在呢它支持CPU的架构就非常多了.真实的开发应该是全部都拿,如果全部都拿一会儿编译会非常慢,所以我拿一个x86就行了.把它放到libs目录.


申请Key需要两个数据:一个是Android签名证书的sha1值(sha1是这样的一个指纹),一个是包名:baidumapsdk.demo.我们这个Eclipse运行的时候用的都是同一个debug.keystore,所以说这个签名肯定一样.你再去敲一下那个命令拿到的签名肯定一样.但是包名呢它就不同了,所以说这个key你不能用原来demo的那个key,必须重新去申请.


Hello BaiduMap

                                                                                              


只要是阅读开发文档有红色的文字呢我们就需要去读一下,一定要读一下.因为红色比较重要.Application是在四大组件之前就初始化,在它们之前.也就是说我们应用最开始运行的时候呢它会先给你初始化这个Application,然后呢才是初始化这个Activity还有服务等等.既然人家建议我们这么做,那么我们就创建一个Application.


package com.itheima.baidumap74;

//import com.baidu.mapapi.SDKInitializer;

import com.baidu.mapapi.map.MapView;

import android.os.Bundle;
import android.app.Activity;
//import android.view.Menu;

public class MainActivity extends Activity {

    private MapView mMapView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
        // 注意该方法要再setContentView方法之前实现
        // SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
         //获取地图控件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }
    //Ctrl+I格式化
    //这是百度地图规定的,它mMapView也有生命周期方法,你必须在Activity相应的生命周期方法里面呢去调mMapView对应的生命周期方法.
    //这个就没什么好记的了,死记硬背就行了.照着调用.
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
        mMapView.onDestroy();  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
        mMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
        mMapView.onPause();  
        }  

}
package com.itheima.baidumap74;
import com.baidu.mapapi.SDKInitializer;


import android.app.Application;

//MyApplication也可以说是一个组件,既然是组件的话呢跟你那个四大组件一样是也需要配置的.
public class MyApplication extends Application {
    @Override
    public void onCreate() {// 覆盖一个onCreate()方法,当这个组件MyApplication被运行的时候呢它首先会走这个onCreate
        // 进行一个创建.
        // TODO Auto-generated method stub
        // super.onCreate();//空实现,可以删除掉.
        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
        // 注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());//把初始化SDK这个代码在MainActivity里面剪切掉,放到
        //Application里面去完成
    }
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.baidumap74"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" 
        android:name=".MyApplication"><!-- .就代表你前面这个基础的一个包 -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="QaDs6ScFuwxGh75ku6gijqNnBhnXmNqZ" />
                 <!--  
                 下面这个activity也是一样,简单一点,以.打头就行了.这样看起来会比较简短一点,看起来会比较舒服.
            android:name="com.itheima.baidumap74.MainActivity"
            -->
        <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>
    </application>

</manifest>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <!-- MapView是带包名的,说明这个View不是系统自带的View,是第三方的View.明显就是用于显示地图的叫MapView -->

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />

</RelativeLayout>
原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/7261213.html