本文是在安卓里调用百度地图SDK。
百度地图 Android SDK是一套基于Android 4.0及以上版本设备的应用程序接口。 您可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。
重点功能有:
地图展示与交互
室内地图
境外地图
地图覆盖物
POI检索
路线规划
步行导航
骑行导航
使用流程:
具体调用过程:
1.下载开发包
根据需要,下载不同的开发包
2.添加jar文件
打开解压后的开发包文件夹,找到BaiduLBS_Android.jar文件将其拷贝至工程的app/libs目录下,如图:
往工程中添加jar文件
在工程配置中需要将前面添加的jar文件集成到我们的工程中,在libs目录下,选中每一个jar文件(此处只有一个BaiduLbs_Android.jar)右键,选择Add As Library…,此时会发现在app目录的build.gradle的dependencies块中生成了工程所依赖的jar文件的对应说明
3.添加so文件
在src/main/目录下新建jniLibs目录(如果您的项目中已经包含该目录不用重复创建),在下载的开发包中拷贝项目中需要的CPU架构对应的so文件文件夹到jniLibs目录
4.配置AndroidManifest.xml文件
在<application>中加入如下代码配置开发密钥(AK):
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
</application>
在<application/>外部添加如下权限声明:
注:自Android6.0起部分权限的使用需要开发者在代码中动态申请。
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,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" />
5. 在布局文件中添加地图容器
<?xml version="1.0" encoding="utf-8"?>
<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=".BaiduMapActivity">
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
</RelativeLayout>
6.创建Activity
package com.example.baidumap;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
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.MapStatus;
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 BaiduMapActivity 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());//初始化地图SDK
setContentView(R.layout.activity_baidu_map);
mMapView=(MapView)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);
}
public 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.mapdw);
locationMode=MyLocationConfiguration.LocationMode.NORMAL;
MyLocationConfiguration config=new MyLocationConfiguration(locationMode,true,bitmapDescriptor);
mBaiduMap.setMyLocationConfiguration(config);
}else{
Log.i("Location","没有获取到GPS的信息");
}
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
mMapView=null;
}
@Override
protected void onStart() {
super.onStart();
mBaiduMap.setMyLocationEnabled(true);
}
@Override
protected void onStop() {
super.onStop();
mBaiduMap.setMyLocationEnabled(false);
}
}