-
Notifications
You must be signed in to change notification settings - Fork 82
24 蓝牙Mesh相关API
liYueAliyun edited this page Sep 19, 2019
·
1 revision
/**
* ApiLevel: 70
* 安全连接蓝牙Mesh设备
*/
XmBluetoothManager.getInstance().bleMeshConnect(mac, new Response.BleConnectResponse() {
@Override
public void onResponse(int code, Bundle bundle) {
if (code == XmBluetoothManager.Code.REQUEST_SUCCESS) {
// 连接成功
}
}
});
/**
* ApiLevel: 70
* 获取蓝牙Mesh设备当前固件版本号(只有连接设备成功后才能获取固件版本号)
*/
XmBluetoothManager.getInstance().getBleMeshFirmwareVersion(mMac, new Response.BleReadFirmwareVersionResponse() {
@Override
public void onResponse(int code, String version) {
if (code == XmBluetoothManager.Code.REQUEST_SUCCESS) {
// version类似1.0.3_2001
}
}
});
参考蓝牙基础API文档,里面包含读、写、接收等Ble蓝牙相关接口的操作
手机蓝牙连接上蓝牙Mesh设备后,先读取设备的固件版本号,再与从服务端获取的最新固件版本号做比较,如果有新的固件,则需要在通用设置中提示用户升级固件。
调用如上描述的XmBluetoothManager.getInstance().getBleMeshFirmwareVersion()接口。
回调的BleMeshFirmwareUpdateInfo中包含米家扩展程序管理后台最新蓝牙固件信息,包括最新固件的版本version、safeUrl、url、changeLog和md5。safeUrl是已签名固件的下载链接,url是未签名固件的下载链接,需要下载safeUrl对应的固件地址
/**
* ApiLevel: 70
* 获取蓝牙设备固件升级信息
*/
XmPluginHostApi.instance().getBleMeshFirmwareUpdateInfo(String model, String did, Callback<BleMeshFirmwareUpdateInfo> callback);
/**
* ApiLevel: 32
*/
XmPluginHostApi.instance().downloadFirmware(url, new Response.FirmwareUpgradeResponse() {
@Override
public void onProgress(int progress) {
}
@Override
public void onResponse(int code, String filePath, String md5) {
}
});
/**
* ApiLevel: 28
*/
XmPluginHostApi.instance().cancelDownloadBleFirmware(url);
/**
* ApiLevel: 70
* 统一的蓝牙Mesh设备固件升级(只有连接设备成功后才能调用升级),非mesh设备不能调用这个升级接口
* @param mac
* @param filePath 已下载到本地的固件文件路径
* @param response 返回固件升级进度,以及升级结果
*/
XmBluetoothManager.getInstance().startBleMeshUpgrade(mMac, filePath, new Response.BleUpgradeResponse() {
@Override
public void onProgress(int progress) {
// progress下载OTA升级进度
}
@Override
public void onResponse(int code, String errorMsg) {
if (code == XmBluetoothManager.Code.REQUEST_SUCCESS) {
// OTA升级成功
} else {
// OTA升级失败
}
}
});
/**
* ApiLevel: 65+
* 取消正在执行的蓝牙Mesh固件升级
* @param mac
*/
XmPluginHostApi.instance().cancelDownloadBleFirmware(String mac);
findViewById(R.id.title_bar_more).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<MenuItemBase> menus = new ArrayList<MenuItemBase>();
menus.add(IXmPluginHostActivity.BleMenuItem.newUpgraderItem(new MyUpgrader()));
hostActivity().openMoreMenu((ArrayList<MenuItemBase>) menus, true, 0);
}
});
findViewById(R.id.title_bar_more).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<MenuItemBase> menus = new ArrayList<MenuItemBase>();
menus.add(IXmPluginHostActivity.BleMenuItem.newUpgraderItem(new MyUpgrader()));
hostActivity().openMoreMenu2((ArrayList<MenuItemBase>) menus, true, 0, null);
}
});
public class MyUpgrader extends BleUpgrader {
@Override
public String getCurrentVersion() {
// 返回当前固件版本
}
@Override
public String getLatestVersion() {
// 返回最新固件版本
}
@Override
public String getUpgradeDescription() {
// 返回最新固件升级描述
}
@Override
public void startUpgrade() {
// 开始固件升级时回调
}
@Override
public void onActivityCreated(Bundle bundle) throws RemoteException {
// 必须得在onActivityCreated调用showPage告诉米家app当前升级状态,不然的话会一直显示Loading页
// 通知米家app升级页面,当前固件不是最新版本,需要提示用户升级
showPage(XmBluetoothManager.PAGE_CURRENT_DEPRECATED, null);
}
}
/**
* 正在loading
*/
public static final int PAGE_LOADING = 0;
/**
* 当前固件已是最新页
*/
public static final int PAGE_CURRENT_LATEST = 1;
/**
* 当前固件不是最新
*/
public static final int PAGE_CURRENT_DEPRECATED = 2;
/**
* 固件更新中
*/
public static final int PAGE_UPGRADING = 3;
/**
* 固件更新成功
*/
public static final int PAGE_UPGRADE_SUCCESS = 4;
/**
* 固件更新失败
*/
public static final int PAGE_UPGRADE_FAILED = 5;
// 必须得在onActivityCreated调用showPage告诉米家app当前升级状态,不然的话会一直显示Loading页
// 如果当前固件已经是最新版本了,调用showPage(XmBluetoothManager. PAGE_CURRENT_LATEST, null);
// 如果当前固件不是最新,需要升级,调用showPage(XmBluetoothManager.PAGE_CURRENT_DEPRECATED, null);
showPage(int pageIndex, Bundle data);
Bundle bundle = new Bundle();
bundle.putInt(XmBluetoothManager.EXTRA_UPGRADE_PROCESS, mProgress++);
showPage(XmBluetoothManager.PAGE_UPGRADING, bundle);
可参考蓝牙Mesh Demo工程里的相关代码。