天天看點

百度地圖詳解使用,顯示自己的目前位置BaiduMap

第一步:注冊百度開發者賬号 http://lbsyun.baidu.com/,下載下傳對應的jar和Key

第二步:建立應用

百度地圖詳解使用,顯示自己的目前位置BaiduMap

填寫正确的SHA1和應用的包名,并且下載下傳

百度地圖詳解使用,顯示自己的目前位置BaiduMap

第三步:解壓上面的SDK_Lib壓縮封包件

百度地圖詳解使用,顯示自己的目前位置BaiduMap

libs下放入jar包,并且添加到依賴

main下面建立檔案夾JNIlibs放入這些檔案

第四步:AndroidManifest.xml檔案配置

加入所需要的權限

<!-- 通路網絡,進行地圖相關業務資料請求,包括地圖資料,路線規劃,POI檢索等 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 擷取網絡狀态,根據網絡狀态切換進行資料請求網絡轉換 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!-- 讀取外置存儲。如果開發者使用了so動态加載功能并且把so檔案放在了外置存儲區域,則需要申請該權限,否則不需要 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 寫外置存儲。如果開發者使用了離線地圖,并且資料寫在外置存儲區域,則需要申請該權限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- 這個權限用于進行網絡定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 這個權限用于通路GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
           

application中添加

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="value">
        </meta-data>
           

value 是建立應用的

百度地圖詳解使用,顯示自己的目前位置BaiduMap

布局檔案

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".MainActivity">

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

</android.support.constraint.ConstraintLayout>
           

MainActivity

package com.yuan.testbaidumap;

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

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 MainActivity extends AppCompatActivity {
    private MapView mMapView;
    private BaiduMap mBaiduMap;
    private boolean isFirstLoc = true;
    private MyLocationConfiguration.LocationMode locationMode; //目前定位模式

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        mMapView = findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();

        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                1000,
                1,
                new LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {
                        locationUpdates(location);
                    }

                    @Override
                    public void onStatusChanged(String provider, int status, Bundle extras) {

                    }

                    @Override
                    public void onProviderEnabled(String provider) {

                    }

                    @Override
                    public void onProviderDisabled(String provider) {

                    }
                }
        );
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        locationUpdates(location);
    }

    private void locationUpdates(Location location) {
        if (location != null) {
            LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
            Log.i("Location", "緯度:" + location.getLatitude() + "經度:" + location.getLongitude());
            if (isFirstLoc) {
                MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
                mBaiduMap.animateMapStatus(u); // 設定地圖位置
                isFirstLoc = false;
            }
            // 構造定位資料
            MyLocationData locationData = new MyLocationData.Builder().accuracy(location.getAccuracy())
                    .direction(100) // 設定方向資訊
                    .latitude(location.getLatitude()) // 設定次元坐标
                    .longitude(location.getLongitude()) // 經度
                    .build();
            mBaiduMap.setMyLocationData(locationData); //設定定位資料
            BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher);
            locationMode = MyLocationConfiguration.LocationMode.NORMAL; // 設定定位模式
            MyLocationConfiguration configuration = new MyLocationConfiguration(locationMode, true, bitmapDescriptor);
            mBaiduMap.setMyLocationConfiguration(configuration); // 顯示定位圖示
        } else {
            Log.i("Location","沒有擷取到GPS資訊");
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        mBaiduMap.setMyLocationEnabled(true); // 開啟定位圖層
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mBaiduMap.setMyLocationEnabled(false); // 停止圖層
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
        mMapView = null;
    }
}
           

測試如果沒有資料,請到室外或者空曠的地方。