# MinewBeaconAdmin Android 开发套件

# 新建工程

Android Studio配置

targetSdkVersion版本选择 33 将minewBeaconAdmin.jar包放入道libs文件夹下,然后在当前工程下的build.gradle文件配置项中的dependencies新增内容,如下compile files('libs/minewBeaconAdmin.jar')

Eclipse配置

targetSdkVersion版本选择 33 将minewBeaconAdmin.jar包放入道libs文件夹下,右击工程propeties,选择Java build Path,在Library选项中添加minewDevice依赖关系

targetSdkVersion版本大于等于23时,需要动态申请权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
1
2

当前SDK需要的权限:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
1
2

targetSdkVersion版本选择 33

    <uses-permission android:name="android.permission.BLUETOOTH"
        android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
        android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN"
        tools:targetApi="s" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
1
2
3
4
5
6
7

添加service和receiver,如下

<service android:name="com.minew.beaconset.ConnectService"/>

<receiver android:name="com.minew.beaconset.BluetoothChangedReceiver"
    android:exported="false">
    <intent-filter>
        <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
    </intent-filter>
</receiver>

1
2
3
4
5
6
7
8
9

targetSdkVersion版本选择 33

必须要授权蓝牙相关的权限才能调用蓝牙的相关api,不然会报错;receiver由静态广播改成动态广播,在相应的逻辑代码处调用registerBleChangeBroadcast()方法

AndroidStudio build.gradle 添加如下依赖:

dependencies {
    implementation 'org.greenrobot:eventbus:3.0.0'
    implementation 'com.google.code.gson:gson:2.2.4'
    implementation files('libs/minewBeaconAdmin.jar')
}
1
2
3
4
5

你可以使用此SDK对周围的Beacon进行诸如:uuid,major,minor等等参数配置。当前使用四个类实现这部分功能。

# 类概述

# MinewBeaconManager

用于扫描设备的管理类;

功能:

  1. 发起扫描/停止扫描;
  2. 获取当前扫描范围内设备/获取全部扫描过的设备;
  3. 获取当前蓝牙状态;
  4. 监听设备进出状态(代理回调);
  5. 更新扫描到设备的数据(代理回调);
  6. 监听蓝牙状态改变(代理回调);
  7. 开启/关闭连接服务;

# MinewBeacon

扫描到设备的数据模型类

此类所有属性均为只读,底层将会周期性更新每个设备的最新数据(如果它没有离开扫描范围的话)。

功能:

  1. 导出设备数据为JSON字符串;
  2. 支持导入JSON字符串;

# MinewBeaconConnection

设备与iPhone之间连接状态以及数据更新的维护类

每一个此类实例都对应一个MinewBeacon和MinewBeaconSetting(连接状态下)实例。

功能:

  1. 连接到某个设备/断开与某个设备的连接
  2. 更新属性“MinewBeaconSetting”的改动到设备(回调方法返回是否成功更新)

# MinewBeaconSetting

连接到设备后的数据模型

此类只能在Connection实例发起连接并且连接成功后获取,部分属性可修改,修改后会临时缓存,只有通过Connection实例成功更新到设备改动才会生效。

功能:

  1. 导出数据为JSON字符串;
  2. 导入JSON字符串;

# 使用方法

# 扫描设备部分

MinewbeaconManager管理类来发起扫描,SDK会为扫描到的设备生成MinewBeacon实例;


// 1.获取MinewBeaconManager实例,设置代理对象
MinewBeaconManager mMinewBeaconManager = MinewBeaconManager.getInstance(this);
//设置回调监听
mMinewBeaconManager.setMinewbeaconManagerListener(new MinewBeaconManagerListener() {});

//2.开启连接服务
mMinewBeaconManager.startService();

//3.发起扫描
mMinewBeaconManager.startScan();



MinewBeaconManagerListener接口说明:
// 蓝牙状态:已开启,已关闭,未知
// 仅在蓝牙已开启状态下才可以正常工作
- void onUpdateBluetoothState(BluetoothState state);

// 监听范围内设备(10秒内出现)
- void onRangeBeacons(List<MinewBeacon> beacons);

// 监听消失设备(10秒后未出现)
- void onDisappearBeacons(List<MinewBeacon> beacons);

// 监听新发现的设备
- void onAppearBeacons(List<MinewBeacon> beacons);


/* MinewBeaconManager其它方法 */
// 主动获取所有扫描到的设备
- List<MinewBeacon> getScannedBeacons()

// 主动获取范围内设备
- List<MinewBeacon> getInRangeBeacons()

// 主动获取新发现的设备
- List<MinewBeacon> getNewMinewBeaconList()

// 设置onRangeBeacons回调的间隔时间,单位为毫秒,默认为1000毫秒,最小值为100毫秒
mMinewBeaconManager.setRangeInterval(1000);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 连接设备部分

如果要连接设备,需要用扫描获取到的MinewBeacon实例来生成一个MinewBeaconConnection实例,通过Connection来管理连接/断开/更新数据等。

// 1. 使用一个MinewBeacon实例生成Connection实例,设置回调监听
MinewBeaconConnection minewBeaconConnection = new MinewBeaconConnection(context, minewBeacon);
minewBeaconConnection.setMinewBeaconConnectionListener(minewBeaconConnectionListener);
               
// 2. 连接设备
 minewBeaconConnection.connect();

// 3.通过代理方法获取连接状态
- void onChangeState(MinewBeaconConnection connection, ConnectionState state);
{
  // 当连接成功后,connection实例的MinewBeaconSetting属性不再为空,这个MinewBeaconSetting实例就是从设备上获取到的数据信息
  switch (state) {
                case BeaconStatus_Connected:
                   minewBeaconConnection.setting.getMajor();
                    break;
                case BeaconStatus_ConnectFailed:
                case BeaconStatus_Disconnect:
                    break;
            }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 配置设备部分

在connection的状态为已连接时,可以修改其属性setting的所有非只读属性,修改完毕只需执行更新方法即可将改动更新到Beacon设备,通过代理方法可以知道是否已经成功更新。

// 1.修改connection的setting属性
MinewbeaconSetting mMinewBeaconSetting = minewBeaconConnection.setting;
mMinewBeaconSetting.setUuid("FDA50693A4E24FB1AFCFC6EB07647825");

/*.....*/

// 2.更新改动到设备
// 需要注意的是,这里的参数是Beacon设备的当前重启密码;
mMinewBeaconConnection.writeSetting("minew123");

// 3.通过代理方法获取是否成功更新改动到设备
- void onWriteSettings(MinewBeaconConnection connection, final boolean success, boolean dissView) {
   if (success) {
               Toast.makeText(getApplicationContext(), "配置成功", Toast.LENGTH_SHORT).show();
           } else {
              Toast.makeText(getApplicationContext(), "配置失败", Toast.LENGTH_SHORT).show();
                }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 设备关机功能

目前只有B6-B001A版本的设备具备关机功能

// 1.判断是否有关机功能
MinewBeaconConnection mMinewBeaconConnection = MinewBeaconConnection.minewBeaconConnections.get(mac);

MinewbeaconSetting mMinewBeaconSetting = minewBeaconConnection.setting;
if (mMinewBeaconSetting.isPowerOff()) {//true:有关机功能,false:没有关机功能
   //此处可显示关机按钮
}

// 2.发送关机指令
mMinewBeaconConnection.writePowerOff();

1
2
3
4
5
6
7
8
9
10
11

更多细节,详见Demo。

# 更新内容

# 2023.04.24

  • 可设置扫描回调数据的间隔时间;

# 2023.02.02

  • 新增B6-B001A版本的关机功能;

# 2022.04.20

  • 优化了过滤无关设备;
  • 新增支持Beacon info广播帧;
  • 修复若干问题;

# 2018.11.20

修复扫描时异常;

# 之前

无;

上次更新:: 2024/1/12 14:37:29