16 蓝牙固件升级API - MiEcosystem/NewXmPluginSDK GitHub Wiki
/**
* 必须与设备处于连接状态的时候才能读取
*/
UUID miService = UUID.fromString("0000FE95-0000-1000-8000-00805f9b34fb");
UUID firmwareVersionCharacter = UUID.fromString("00000004-0000-1000-8000-00805f9b34fb");
XmBluetoothManager.getInstance().read(mac, miService, firmwareVersionCharacter, new BleReadResponse() {
@Override
public void onResponse(int code, byte[] data) {
if (code == XmBluetoothManager.Code.REQUEST_SUCCESS && data != null && data.length > 0) {
// version类似1.0.3_2001
String version = new String(data);
}
}
});
/**
* ApiLevel: 33
* 必须与设备处于连接状态的时候才能读取
*/
XmBluetoothManager.instance().getBluetoothFirmwareVersion(mac, new Response.BleReadFirmwareVersionResponse() {
@Override
public void onResponse(int code, String version) {
// version类似1.0.3_2001
}
});
/**
* ApiLevel: 16
*/
XmPluginHostApi.instance().getBluetoothFirmwareUpdateInfo(model, new Callback<BtFirmwareUpdateInfo>() {
@Override
public void onSuccess(BtFirmwareUpdateInfo btFirmwareUpdateInfo) {
}
@Override
public void onFailure(int error, String msg) {
}
});
/**
* ApiLevel: 20
*/
XmPluginHostApi.instance().downloadBleFirmware(url, new Response.BleUpgradeResponse() {
@Override
public void onProgress(int progress) {
}
@Override
public void onResponse(int code, String filePath) {
}
});
/**
* 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);
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);
可参考蓝牙Demo工程里的固件升级相关代码。