第一步:注冊百度開發者賬号 http://lbsyun.baidu.com/,下載下傳對應的jar和Key
第二步:建立應用
填寫正确的SHA1和應用的包名,并且下載下傳
第三步:解壓上面的SDK_Lib壓縮封包件
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 是建立應用的
布局檔案
<?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;
}
}
測試如果沒有資料,請到室外或者空曠的地方。