# BRTMap3D_Android_SDK_2020_Release
**Repository Path**: sdk-integration/BRTMap3D_Android_SDK_2020_Release
## Basic Information
- **Project Name**: BRTMap3D_Android_SDK_2020_Release
- **Description**: 智石室内地图SDK开发包2020
- **Primary Language**: Android
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-05-07
- **Last Updated**: 2024-06-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 智石科技室内地图SDK for Android 集成指南
### 一、下载SDK
[http://help.brtbeacon.com/front/sdksup/dev_down.html?s=15&c=112](http://help.brtbeacon.com/front/sdksup/dev_down.html?s=15&c=112)
### 二、添加室内地图库
复制相关库文件到工程 app/libs 目录下:

### 三、修改工程配置
#### 1、打开工程根目录下 build.gradle 文件
找到代码块 allprojects {} ,在 repositories {} 代码块内添加代码(如图所示)
flatDir {
dirs 'libs'
}

#### 2、打开工程目录下 app/build.gradle 文件
1) 在 android {} 代码块中添加以下配置项
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
main {
jniLibs.srcDir(['libs'])
}
}

2) 在 dependencies {} 代码块中添加地图库引用配置项
// 室内地图运行库
implementation(name: 'MapboxGLAndroidSDK-release-9.1.0', ext: 'aar')
implementation group: 'com.mapbox.mapboxsdk', name: 'mapbox-android-telemetry', version: '5.0.0'
implementation group: 'com.mapbox.mapboxsdk', name: 'mapbox-sdk-geojson', version: '5.0.0'
implementation group: 'com.mapbox.mapboxsdk', name: 'mapbox-android-gestures', version: '0.6.0'
implementation group: 'com.mapbox.mapboxsdk', name: 'mapbox-sdk-turf', version: '5.0.0'
implementation 'com.vividsolutions:jts:1.13'
implementation 'commons-codec:commons-codec:1.10'
// 智石科技室内地图库
implementation(name: 'BRTMapData-release-2.2.0', ext: 'aar')
implementation(name: 'BRTMap3DLibrary-release-2.2.0', ext: 'aar')
// 智石科技室内定位库
implementation(name: 'BRTLocationLibrary-release-2.2.0', ext: 'aar')

### 四、添加权限声明及运行时权限申请
#### 1、打开工程 AndroidManifest.xml 文件
添加以下运行时权限声明
注意: 如果编辑目标平台为Android 10, 请在 application 中添加以下属性:
android:requestLegacyExternalStorage="true"

#### 2、添加运行时权限申请
安卓6.0以上系统,需要为APP添加运行时权限申请代码,以下权限需要动态申请:
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE
请在地图加载之前检查并申请相关权限,以下为Activity需要添加的代码示例。
private static final int MAP_PERMISSION_REQUEST_CODE = 9999;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查并申请权限
checkNeedPermission();
}
private boolean checkNeedPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//判断当前系统的SDK版本是否大于23
List permissionNeedRequest = new LinkedList<>();
for (String permssion: permissionsNeedCheck) {
if(ActivityCompat.checkSelfPermission(this, permssion) != PackageManager.PERMISSION_GRANTED) {
permissionNeedRequest.add(permssion);
}
}
if (!permissionNeedRequest.isEmpty()) {
ActivityCompat.requestPermissions(this, permissionNeedRequest.toArray(new String[0]), MAP_PERMISSION_REQUEST_CODE);
return true;
}
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
// requestCode即所声明的权限获取码,在requestPermissions时传入
case MAP_PERMISSION_REQUEST_CODE:
boolean isAllGrant = true;
for (int grantResult: grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
isAllGrant = false;
break;
}
}
if (!isAllGrant) {
Toast.makeText(getApplicationContext(), "获取位置权限失败,请手动前往设置开启", Toast.LENGTH_SHORT).show();
return;
}
break;
default:
break;
}
}
private static final List permissionsNeedCheck;
static {
permissionsNeedCheck=new LinkedList<>();
permissionsNeedCheck.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
permissionsNeedCheck.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
permissionsNeedCheck.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsNeedCheck.add(android.Manifest.permission.READ_EXTERNAL_STORAGE);
}
### 五、编写地图加载显示代码
以下准备在 MainActivity.java 中展示室内地图, 其对应的ContentView资源文件为: activity_main.xml
#### 1、修改activity_main.xml
添加 com.brtbeacon.map.map3d.BRTMapView 标签, 并设置其ID为 mapView

#### 2、修改MainActivity.java
1) 声明室内地图对象
private BRTMapView mapView;
2) 修改onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化地图引擎环境(必须在setContentView之前调用)
BRTMapEnvironment.initMapEnvironment(this);
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapView);
mapView.addMapListener(mapViewListener);
// 检查并申请权限
if(!checkNeedPermission()) {
// 加载显示地图
initMapView();
}
}
3) 添加地图加载与回调代码
private void initMapView() {
mapView.init("00230083", "1b7877da50bc483789c815910d739402");
}
private BRTMapView.BRTMapViewListener mapViewListener = new BRTMapView.BRTMapViewListener() {
@Override
public void mapViewDidLoad(BRTMapView brtMapView, Error error) {
if (error != null) {
return;
}
//地图加载成功后,显示第一个楼层
mapView.setFloor(mapView.getFloorList().get(0));
}
@Override
public void onFinishLoadingFloor(BRTMapView brtMapView, BRTFloorInfo brtFloorInfo) {
}
@Override
public void onClickAtPoint(BRTMapView brtMapView, BRTPoint brtPoint) {
}
@Override
public void onPoiSelected(BRTMapView brtMapView, List list) {
}
};
4) 运行测试
让测试手机处于联网状态,并确认网络能正常访问。