MinewBeaconAdmin Android 开发套件

新建工程

Android Studio配置

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

Eclipse配置

targetSdkVersion版本选择 21 将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版本选择 31(Android 12)

    <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"
        android:usesPermissionFlags="neverForLocation"
        tools:targetApi="s" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
1
2
3
4
5
6
7
8

添加service和receiver,如下

	<service android:name="com.minew.beaconset.ConnectService"/>
	    <receiver android:name="com.minew.beaconset.BluetoothChangedReceiver">
	        <intent-filter>
	            <action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
	        </intent-filter>
	    </receiver>
1
2
3
4
5
6

targetSdkVersion版本选择 31(Android 12)

必须要授权蓝牙相关的权限才能调用蓝牙的相关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();

// 4.通过代理方法获取扫描数据更新
// 此方法定时回调用于获取周围设备的最新扫描数据
- void onRangeBeacons(List<MinewBeacon> beacons);



/* 如果要监听设备的进出状态,可以通过实现以下方法 */

// 监听消失设备
- void onDisappearBeacons(List<MinewBeacon> beacons);

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

/* 还可以监听蓝牙的状态改变 */
// 蓝牙状态:已开启,已关闭,未知
// 仅在蓝牙已开启状态下才可以正常工作
- void onUpdateBluetoothState(BluetoothState state);
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

连接设备部分

如果要连接设备,需要用扫描获取到的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

更多细节,详见Demo。

更新内容

2022.04.20

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

2018.11.20

修复扫描时异常;

之前

无;

上次更新:: 2022/4/19下午5:53:22