# BDSDKDEMO
**Repository Path**: nip-team/BDSDKDEMO
## Basic Information
- **Project Name**: BDSDKDEMO
- **Description**: 北斗SDK实例
- **Primary Language**: Android
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 10
- **Created**: 2021-04-29
- **Last Updated**: 2021-04-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 北斗SDK使用说明
### 一、配置工程
#### 1.添加aar文件
将bdsdklibrary.aar文件复制到工程的libs目录下:

并在app下的build.gradle中的dependencies中添加依赖:
```
//北斗应急终端SDK
implementation(name: 'bdsdklibrary_1.0', ext: 'aar')
```
#### 2.初始化(注册)
推荐在工程的Application中的onCreate()中初始化:
```
//注册北斗应急终端SDK
BeidouSDKManage.register(this);
```
#### 3.终端数据监听
使用 BeidouSDKManage.getInstance().setProtocolListener()方法可添加以下两种监听器,用于监听终端返回数据:
①I40ProtocolListener
北斗4.0协议监听器,一般是一代盒子PD01使用。
②I21ProtocolListener
北斗2.1协议监听器,一般是PD02/PD03/PD11/PD13,设备使用。
### 二、蓝牙管理模块
#### 1.连接蓝牙
过搜索盒子蓝牙获取到盒子的BluetoothDevice后,调用以下代码连接终端:
```java
//连接蓝牙
BeidouSDKManage.getInstance().connectDevice(device.getAddress());
```
连接成功后,会执行监听器中的onConnectBleSuccess()方法。
#### 2.断开蓝牙
调用以下代码与终端断开连接:
```java
//断开蓝牙连接
BeidouSDKManage.getInstance().disConnectDevice();
```
断开连接成功后会执行监听器中的onDisconnectBleSucces()方法。
#### 3.自动重连功能
通过以下代码可以打开或者关闭自动重连功能:
```java
//自动重连,true:打开;flase:关闭;默认关闭
BeidouSDKParam.isAutoConnect=true;
```
#### 4.写入蓝牙数据
为了方便,SDK提供了三种发送方法:
①sendBytesCommand(byte[] bytes)
发送字节数组,使用方法如下:
```java
//发送字节数组指令
BeidouSDKManage.getInstance().sendBytesCommand(commandBytes);
```
②sendStringCommand(String string)
发送字符串,使用方法如下:
```java
//发送字符串指令,版本查询
BeidouSDKManage.getInstance().sendStringCommand("$CCVRQ,*79\r\n");
```
③sendHexCommand(String hex)
发送十六进制字符串,使用方法如下:
```java
//发送十六进制指令,版本查询
BeidouSDKManage.getInstance().sendHexCommand("2443435652512C2A37390D0A");
```
#### 5.接收数据
收到终端数据后,会通过监听器下的onAllCommandReceived(String hex)方法返回十六进制数据,如需其他格式可自行转换。
### 三、终端管理模块
#### 1.盒子信息
①输入 CCZDC(String frequency)
该输入方法在类Protocal21Write下,调用方法如下:
```java
//终端信息自检输出,3秒一次
BeidouSDKManage.getInstance().sendHexCommand(Protocal21Write.getInstance().CCZDC("3"));
```
| 参数 | 说明 |
|--|--|
|frequency |自检频度 |
②输出 BDZDX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
| 参数 |说明 |
|----|----|
| var0 | 十六进制原始指令 |
|var1[1]|北斗卡号码|
| var1[2] | 电池电量 |
|var1[3] | 波速1信号 |
|var1[4] |波速2信号 |
|var1[5] |波速3信号 |
|var1[6] |波速4信号 |
|var1[7] |波速5信号 |
|var1[8] |波速6信号 |
|var1[9] |波速7信号|
|var1[10] |波速8信号|
|var1[11] |波速9信号|
|var1[12] |波速10信号|
|var1[13] |服务频度|
|var1[14] |北斗卡等级|
|var1[15] |通讯长度|
#### 2.查询当前系统工作模式
①输入 CCMSC()
该输入方法在类Protocal21Write下,调用方法如下:
```java
//查询系统当前工作模式
BeidouSDKManage.getInstance().sendHexCommand(Protocal21Write.getInstance().CCMSC());
```
②输出 BDMSH(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
| 参数 |说明 |
|--|--|
|var0 | 十六进制原始指令 |
|var1[1] | 0.表示无工作模式
1.表示正常工作模式(正常开机后,系统默认进入的工作模式)
2 表示系统处于SOS工作模式
3 表示系统处于极限追踪-正常模式
4 表示系统处于极限追踪-省电模式
5 表示系统处于极限追踪-定位模式
6 表示系统处于按键触发模式
7 表示系统处于关闭模式
8表示系统处于OK工作模式 |
#### 3.通信申请
##### 3.1 发送短报文
如何发射北斗短报文,发送北斗短板文时请将北斗设备的天线朝南开阔的地方,并倾斜25°~45°,具体角度开发者根据自己当前地区调整,调整至北斗设备的“信号灯”至绿色。
北斗短报文通信有频度限制,请开发者控制北斗短报文频度发送控制。
北斗通信报文形式有3种,请开发者使用北斗通信之前稍微了解一下:
* 汉字模式
* 代码模式
* 代码和汉字混合模式
```java
//1、发送混合模式北斗短报文
* @param toNumber 接收卡号
* @param content GB18030内的编码
BeidouSDKManage.getInstance().sendMessage("190077","你好吗?");
//sendMessage()方法是使用混合模式发送,实际调用下面方法(通信申请)
//BeidouSDKManage.getInstance().sendTXA("190077",1,2,"A4C4E3BAC3C2F0A3BF");
//2、发送通信申请
* @param toNumber
* @param type 信息类型 1:普通通信,2:预留,3:通信查询 (北斗4.0协议固定填1)
* @param form 报文形式 0:汉字,1:代码,2:汉字和代码混合
* @param content 报文内容:如果form为0(汉字形式),则填GB18030内的编码,否则填十六进制字符串,如果form为2(混合形式),请在内容前面加上A4,否则卫星系统自动置换前面一个字节为A4
BeidouSDKManage.getInstance().sendTXA(toNumber,type,form,content);
//通信申请注释请认真读,特别是content的说明
两个方法发送都是发短报文,
如果开发者不需要自定义报文内容协议,那么使用sendMessage()混合模式方法即可以,收到报文后会回调receivedMessage()方法,同时先回调BDTXR()方法,因为sendMessage()实际使用混合模式形式sendTXA()方法。
如果开发者需要自定义报文内容协议,那么请使用sendTXA()通信申请方法,收到报文后会回调BDTXR()方法
```
##### 3.2 发送反馈
北斗通信的过程是这样的:

其中在第1过程和第4过程中发生丢包的可能性是比较高的,所以发射北斗短报文需要有良好的信号,接收短报文也需要有良好的北斗信号。
信息反馈只能反馈第1过程中北斗设备是否已经将北斗通信内容发射出去,并不能判断是否送达卫星,更不能判断第2、3、4步骤是否到达。
请设置终端数据监听 BeidouSDKManage.getInstance().setProtocolListener()
```java
/**
* 反馈信息
*
* @param var0 十六进制指令
* var1[1] 相关语句标识符 "TXA" , “DWA” 等
* var1[2] 指令执行情况 Y:指令发射成功 N:指令发射失败
* var1[3] 语句未正确响应的代码标识
* var1[4] 语句未正确响应原因的文字描述
*/
void BDFKI(String var0, String[] var1);
// 【非4.0协议请忽略】如果是使用北斗4.0协议监听器,那么实现void FKXX(String var0, int flag, String info);具体请查看sdk备注
```
##### 3.3 接收短报文
请设置终端数据监听 BeidouSDKManage.getInstance().setProtocolListener()
```java
1、接收混合模式短报文,SDK将接收到的内容自动解析为GB18030编码内容
/**
* 接收到消息(只有混合模式的时候才会调用)
*
* @param formNumber 发信方的北斗卡号
* @param content 内容(GB18030编码)
*/
void receivedMessage(String formNumber, String content);
2、接收通信申请,SDK将接收到通信申请原始数据回调,回调receivedMessage()方法之前一定会先回调这个方法,因为BDTXR是接收到的原始报文内容。
/ ** 报文通信信息
*
* @param var0 十六进制指令
* var1[1] 信息类型
* var1[2] 发信方用户地址ID号
* var1[3] 报文形式
* var1[4] 发信时间(UTC),有问题,不推荐使用
* var1[5] 报文通信信息内容
*/
void BDTXR(String var0, String[] var1);
// 【非4.0协议请忽略】如果是使用北斗4.0协议监听器,那么实现void TXXX(String var0, String[] var1);具体请查看sdk备注
```
#### 4.SOS模块
- 查询/设置
①输入CCSHM(String operation, String serverCardNum, String freq, String content)
该输入方法在类Protocal21Write下。
| 参数 | 说明 |
|----|----|
|operation | ‘0’:查询,为’0’时,无后续字段(设置为null或者‘’)。
‘1’:设置当前SOS的中心号码、频度和内容。 |
|serverCardNum | 中心号码|
|freq | 频度|
|content | 内容|
②输出BDHMX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
| 参数 |说明 |
|----|----|
| var0 |十六进制原始指令 |
| var1[1] |中心号码 |
| var1[2]|频度 |
| var1[3]|内容 |
- 启动/关闭SOS
①输入 CCQJY(String operation)
该输入方法在类Protocal21Write下。
| 参数 | 说明 |
|----|----|
| operation | ‘0’:关闭
‘1’:启动 |
②输出 BDQDX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
| 参数 | 说明 |
|----|----|
| var0 | 十六进制原始指令 |
| var1[1] | 错误码:
‘0’:成功进入/退出SOS
‘1’:无上报中心号码
‘2’:系统已工作在SOS模式
‘3’:未读取到北斗卡,SOS无法工作 |
#### 5.极限追踪模块
- 查询/设置
①输入 CCZZM(String operation, String serverCardNum, String freq, String limitMode)
该输入方法在类Protocal21Write下。
|参数 | 说明 |
|----|----|
|operation |‘0’:查询,为’0’时,无后续字段。
‘1’:设置当前SOS的中心号码、频度和模式。 |
|serverCardNum|中心号码|
|freq|频度|
|limitMode|模式:默认为正常模式
1:正常模式,RD开RN开
2:省电模式,RD开RN关
3:定位模式,RD关RN开|
②输出 BDZZX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
| 参数 |说明 |
|----|----|
| var0 | 十六进制原始指令 |
| var1[1] | 中心号码 |
| var1[2] | 频度 |
| var1[3] | 模式:
1:正常模式,RD开RN开
2:省电模式,RD开RN关
3:定位模式,RD关RN开 |
- 启动/关闭
①输入CCQZZ(String operation)
该输入方法在类Protocal21Write下。
|参数 | 说明 |
|----|----|
|operation |‘0’:关闭
‘1’:启动 |
②输出 BDQZX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
|参数| 说明 |
|----|----|
| var0 |十六进制原始指令 |
| var1[1] |错误码:
‘0’:成功进入/退出极限追踪
‘1’:无上报中心号码
‘2’:系统已工作在SOS模式
‘3’:未读取到北斗卡,极限追踪无法工作 |
#### 6.OK键模块
- 查询/设置
①输入 CCOKS(String operation, String serverCardNum, String content)
该输入方法在类Protocal21Write下。
| 参数 | 说明 |
|----|----|
|operation |‘0’:查询,为’0’时,无后续字段。
‘1’:设置当前OK键的中心号码、内容。 |
|serverCardNum |中心号码 |
|content |内容 |
②输出 BDOKX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
|参数 |说明 |
|----|----|
|var0 |十六进制原始指令 |
|var1[1] |中心号码 |
|var1[2] |内容 |
- 启动/关闭
①输入 CCQOK(String type)
该输入方法在类Protocal21Write下。
|参数 |说明 |
|----|----|
|operation |‘0’:关闭
‘1’:启动 |
#### 7.FN功能键设置
①输入 CCFNS(String operation)
该输入方法在类Protocal21Write下。
|参数 |说明 |
|----|----|
|operation |‘1’:OK报平安键
‘2’:启动极限追踪键 |
②输出 BDFNX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
|参数 |说明 |
|----|----|
|var0 |十六进制原始指令 |
|var1[1] |‘1’:OK报平安键
‘2’:启动极限追踪键 |
#### 8.版本查询
①输入 CCVRQ()
该输入方法在类Protocal21Write下。
②输出 BDVRX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
|参数 |说明 |
|----|----|
|var0 |十六进制原始指令 |
|var1[1] |版本信息 |
#### 9.蓝牙名称设置
①输入 CCBTI(String bluetoothName)
该输入方法在类Protocal21Write下。
|参数 |说明 |
|----|----|
|bluetoothName |蓝牙名称,最大11字节 |
②输出
设置成功后,会自动断开蓝牙连接。
#### 10.未读消息
①输入 CCMSQ(String operation)
|参数 | 说明 |
|----|----|
|operation |‘0’:读未读短信息条数
‘1’:单条读取
‘2’:批量读取 |
②未读条数输出 BDMSX(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
|参数 |说明 |
|----|----|
|var0 |十六进制原始指令 |
|var1[1] |剩余未读短信息的条数 |
③内容输出 BDTXR(String var0, String[] var1)
该输出在监听器I21ProtocolListener下。
|参数 |说明 |
|----|----|
|var0 |十六进制原始指令 |
|var1[1] |信息类型 |
|var1[2] |发送方号码 |
|var1[3] |报文形式:
‘0’:汉字
'1':代码
‘2’:汉字混合代码 |
|var1[4] |发信时间(UTC) |
|var1[5] |内容 |