# 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 目录下: ![室内地图库文件](./images/libs.png) ### 三、修改工程配置 #### 1、打开工程根目录下 build.gradle 文件 找到代码块 allprojects {} ,在 repositories {} 代码块内添加代码(如图所示) flatDir { dirs 'libs' } ![室内地图库文件](./images/build_gradle.png) #### 2、打开工程目录下 app/build.gradle 文件 1) 在 android {} 代码块中添加以下配置项 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } sourceSets { main { jniLibs.srcDir(['libs']) } } ![室内地图库文件](./images/app_build_gradle.png) 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') ![室内地图库文件](./images/app_build_gradle_2.png) ### 四、添加权限声明及运行时权限申请 #### 1、打开工程 AndroidManifest.xml 文件 添加以下运行时权限声明 注意: 如果编辑目标平台为Android 10, 请在 application 中添加以下属性: android:requestLegacyExternalStorage="true" ![室内地图库文件](./images/android_manifest.png) #### 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 ![室内地图库文件](./images/activity_main_xml.png) #### 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) 运行测试 让测试手机处于联网状态,并确认网络能正常访问。