第一步:注册百度开发者账号 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;
}
}
测试如果没有数据,请到室外或者空旷的地方。