首先在很多应用软件中,我们需要用到地图定位,导航....等一些功能,今天我来讲一下Android怎么快速集成百度地图。


  实例图:

     

android auto 三方地图 安卓auto 第三方地图_android


 首先第一步:打开百度地图api官网   http://lbsyun.baidu.com/

android auto 三方地图 安卓auto 第三方地图_百度地图_02

  第二步: 点击获取密钥

android auto 三方地图 安卓auto 第三方地图_ide_03

第三步:  注册百度账号(必须要有百度账号)

android auto 三方地图 安卓auto 第三方地图_ide_04

第四步:找到相关下载,进行自定义下载。

android auto 三方地图 安卓auto 第三方地图_android_05

第五步:选择自己所需要的资源包

android auto 三方地图 安卓auto 第三方地图_xml_06

第六步:解压安装包

   下载后

android auto 三方地图 安卓auto 第三方地图_android auto 三方地图_07

       解压后  

android auto 三方地图 安卓auto 第三方地图_ide_08

 


第七步:将lib文件夹里的文件复制放在Android 项目的libs文件夹里面(可能它不会自动加载,所以你可以手动添加一下,或者clean project ;   make project一下)

android auto 三方地图 安卓auto 第三方地图_百度地图_09

       

android auto 三方地图 安卓auto 第三方地图_android auto 三方地图_10

第八步: 找到API控制台去创建应用,获取密钥

android auto 三方地图 安卓auto 第三方地图_ide_11

第九步: 创建应用

android auto 三方地图 安卓auto 第三方地图_百度地图_12

第十步:获取密钥   

android auto 三方地图 安卓auto 第三方地图_百度地图_13

第十一步:在AndroidManifest.xml   中添加权限和APPKEY


实例代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.exam">
    <!--添加百度地图所需要的权限-->
    <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="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!--添加key-->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="RUPWmmfu3tgH2dFqTs5dkuD1Q7ZNGSkf" />   <!--填写你自己的密钥-->

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <!--添加服务-->
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote"/>
    </application>

</manifest>



第十二步:在项目main 下面创建jniLibs ,并在build.gradle文件下引用

创建

android auto 三方地图 安卓auto 第三方地图_百度地图_14

   

    然后添加

   

android auto 三方地图 安卓auto 第三方地图_ide_15

第十三步  写自己的布局xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.application.MapActivity">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="当前位置:"
        android:id="@+id/map_weizhi"
        />
     <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />
</LinearLayout>



第十四步  写Java代码


package com.example.application;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;

public class MapActivity extends AppCompatActivity {

    private TextView map_weizhi;
    MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private BMapManager mBMapManager;
    //初始化LocationClient
    public LocationClient mLocationClient = null;
    public BDLocationListener myListener = new MyLocationListener();
    //当前定位的模式
    private MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;
    /***
     * 是否是第一次定位
     */
    private volatile boolean isFristLocation = true;
    float mCurrentAccracy= 0.0f;
    double mCurrentLantitude= 0.0;
    double mCurrentLongitude= 0.0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        mLocationClient = new LocationClient(getApplicationContext());
        setContentView(R.layout.activity_map);

        //显示位置的控件
        map_weizhi = (TextView) findViewById(R.id.map_weizhi);
        //声明LocationClient类
        mLocationClient.registerLocationListener( myListener );
        //注册监听函数

        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        // 设置可改变地图位置
        mBaiduMap.setMyLocationEnabled(true);

// 当不需要定位图层时关闭定位图层


        //普通地图
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
      /* //卫星地图
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);*/

        //设置定位参数
        initLocation();
        mLocationClient.start();

    }

    private void initLocation(){
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
        int span = 1000;
        option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
        option.setOpenGps(true);// 可选,默认false,设置是否使用gps
        option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
        option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
        option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要*/
        mLocationClient.setLocOption(option);
    }
    class MyLocationListener implements BDLocationListener{
        @Override
        public void onReceiveLocation(BDLocation location) {
            String city = location.getAddrStr();
            if(null== city){
                city ="null";
            }
            map_weizhi.setText(city);
            // map view 销毁后不在处理新接收的位置
            if (location == null || mMapView == null)
                return;
            // 构造定位数据
            mBaiduMap.setMyLocationEnabled(true);
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(100).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            mCurrentAccracy = location.getRadius();
            // 设置定位数据
            mBaiduMap.setMyLocationData(locData);
            mCurrentLantitude = location.getLatitude();
            mCurrentLongitude = location.getLongitude();
            // 设置自定义图标  (当前位置)
            BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
                    .fromResource(R.drawable.weizhi);

            MyLocationConfiguration config = new MyLocationConfiguration(
                    mCurrentMode, true, mCurrentMarker);
            mBaiduMap.setMyLocationConfigeration(config);

            // 第一次定位时,将地图位置移动到当前位置
            if (isFristLocation)
            {
                isFristLocation = false;
                LatLng ll = new LatLng(location.getLatitude(),

                        location.getLongitude());
                MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
                mBaiduMap.animateMapStatus(u);
            }
        }
        @Override
        public void onConnectHotSpotMessage(String s, int i) {

        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
       /* mLocationClient.stop();*/
        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();
    }

}