Appearance
智石室内定位 Android API
简介
智石科技室内定位 Android API,是由 Java 语言编写的应用程序接口,它能够帮助您在移动端中构建功能丰富、交互性强的室内定位程序。本开发包支持的Android版本为19或更高的系统。
准备工作
了解了室内地图基础流程后,接下来进行室内地图开发的准备工作。
- 您需要成为智石的用户;
- 获取BuildlingID、Appkey,请在(开放平台>建筑与地图>建筑管理)中查看;
开发指南
AndroidStudio项目配置
创建AndroidStudio项目
在Android Studio中创建一个Android项目。
集成SDK
1. 下载开发包
https://github.com/BrightBeacon/IndoorPositionSDK-Android
2. 添加库到项目
复制SDK内的库文件到{工程}/app/libs 目录里,如下图示:
3. 配置build.gradle
在工程目录下的build.gradle文件中 allprojects 块中的 repositories 标签内配置 flatDir 标签,如果没有则新增,代码如下:
java
allprojects {
repositories {
...
// 添加配置以下标签
flatDir {
dirs 'libs'
}
}
}
在app目录下的build.gradle文件中android块中配置sourceSets标签和compileOptions标签,如果没有使用标签则新增,详细配置代码如下:
javascript
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
main {
jniLibs.srcDir(['libs'])
}
}
在app目录下的build.gradle文件中 dependencies 块中配置库引用
java
// 智石科技室SDK基础库
implementation(name: 'BRTMapData-release-2.3.1', ext: 'aar')
// 智石科技室内定位库
implementation(name: 'BRTLocationLibrary-release-2.3.1', ext: 'aar')
配置权限
1. 添加权限声明
在工程AndroidManifest.xml文件中添加权限声明:
java
<!-- 用于在线校验智石开发密钥, 获取定位数据 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 用于室内定位数据的保存和加载 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 蓝牙扫描权限,用于扫描蓝牙Beacon定位信标. -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- 安卓6.0及以后系统需要声明以下权限,才能扫描到蓝牙Beacon信标 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 如果APP编译targetSdk>=31(即安卓12及以上版本),需声明以下权限 -->
<!-- 蓝牙扫描权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<!-- 蓝牙连接权限,控制蓝牙开关 (该权限可选,以便APP请求开启蓝牙) -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
2. 申请运行时权限
java
private static final int REQUST_PERMISSION_CODE = 1000;
private void checkPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<String> permissions = new ArrayList<>();
// 安卓6及以上版本需要申请的相关权限
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// 安卓12及以上版本需要申请的相关权限
permissions.add(Manifest.permission.BLUETOOTH_CONNECT);
permissions.add(Manifest.permission.BLUETOOTH_SCAN);
} else {
// 安卓11以下版本需要申请的相关权限
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}
requestPermissions(permissions.toArray(new String[0]), REQUST_PERMISSION_CODE);
}
}
添加定位功能
以下代码是在Activity onCreate方法中初始化定位引擎:
java
private BRTLocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 请在确认运行权限申请完成后,初始化地图引擎
locationManager = new BRTLocationManager(context, buildingId, appkey);
// 添加定位回调监听
locationManager.addLocationEngineListener(locationManagerListener);
// 开启室内定位功能
locationManager.startUpdateLocation();
}
@Override
protected void onDestroy() {
if (locationManager != null) {
locationManager.stopUpdateLocation();
locationManager = null;
}
super.onDestroy();
}
private BRTLocationManager.BRTLocationManagerListener locationManagerListener = new BRTLocationManager.BRTLocationManagerListener() {
@Override
public void didRangedBeacons(BRTLocationManager BRTLocationManager, List<BRTBeacon> list) {
// 扫描到的蓝牙信标列表。
}
@Override
public void didRangedLocationBeacons(BRTLocationManager BRTLocationManager, List<BRTPublicBeacon> list) {
// 扫描到当前建筑定位蓝牙信标列表。
}
@Override
public void didFailUpdateLocation(BRTLocationManager BRTLocationManager, final Error error) {
// 定位引擎初始化错误或者定位失败。
}
@Override
public void didUpdateDeviceHeading(BRTLocationManager BRTLocationManager, double v) {
// 定位方向更新
}
@Override
public void didUpdateImmediateLocation(BRTLocationManager BRTLocationManager, final BRTLocalPoint tyLocalPoint) {
// 即时位置更新(仅通过蓝牙信标计算后获取的位置数据)
}
@Override
public void didUpdateLocation(BRTLocationManager BRTLocationManager, BRTLocalPoint tyLocalPoint) {
// 步行位置更新(通过惯性和步行判断,平滑处理后的位置数据)
}
};
常用API展示
java
// 设置是否限制计算定位的蓝牙信标数量
locationManager.setLimitBeaconNumber(true);
// 设置用于计算定位的蓝牙信标的最大数量。setLimitBeaconNumber(true)时有效。
locationManager.setMaxBeaconNumberForProcessing(5);
合规使用指南
SDK如何处理个人信息请参见隐私政策:隐私政策
您集成和使用我们的SDK时需要遵从个人信息保护基本要求,详情请参见:合规使用指南
关于
商务合作、地图绘制咨询 4000-999-023