Module: miot/host/ui

本地原生业务页面访问与处理

Example
import {Host} from 'miot'
...
//删除设备
Host.ui.openDeleteDevice()
//分享设备
Host.ui.openShareDevicePage

Methods

(static) addOrCopyIR(did, type, models, extra)

添加或者复制一个红外遥控器

Parameters:
Name Type Description
did string

设备did

type number

0:添加遥控器;1:复制遥控器。默认0

models array

一组红外遥控器model,只传入一个model将直接跳转到相应的品牌列表或者机顶盒列表,支持的models见文档。默认空数组[]

extra object

额外配置,会传入打开的插件页,也有部分特殊功能定义字段如下:

Properties
Name Type Attributes Default Description
create_device boolean <optional>
true

米家首页列表是否展示虚拟遥控器设备。默认true。暂时只有android支持

dismiss_current_plug boolean <optional>
true

since 10020 。在推出新的插件页面时,关掉当前页面,返回app首页。iOS Only

Since:
  • 10003

(static) alertLegalInformationAuthorization(option) → {Promise}

弹窗请求隐私政策和用户协议授权, 支持显示用户体验计划

Parameters:
Name Type Description
option object

配置数据

Properties
Name Type Attributes Default Description
privacyURL string

隐私协议本地资源

agreementURL string <optional>

用户协议本地资源,未设置时如果hideAgreement=false,显示为默认的用户协议

experiencePlanURL string <optional>

用户体验计划本地资源,为空时如果hideUserExperiencePlan=false,则显示米家默认用户体验计划

hideAgreement boolean <optional>
false

是否隐藏用户协议,默认显示用户协议

hideUserExperiencePlan boolean <optional>
false

是否隐藏用户体验计划,默认显示用户体验计划

Since:
  • 10023
Returns:

弹窗授权结果

Type
Promise
Example
//仅供参考
//可以参考project/com.xiaomi.demo/Main/Host/UI/privacy.js部分样例

//batchGetDeviceDatas 设置的属性在设备删除以及设备取消授权之后会自动清空,因此只需要在请求授权检测时,检查下flag即可。撤销授权时可以不用手动清理flag
const agreementURL = require('xxxxx.html');
const privacyURL = require('xxxxx.html');
var options = {agreementURL, privacyURL};
//options.hideAgreement = this.state.hideAgreement;
Service.smarthome.batchGetDeviceDatas([{ did: Device.deviceID, props: ["prop.s_auth_config"] }]).then(res => {
 console.log('batchGetDeviceDatas ', res);
 let alreadyAuthed = false;
 let result = res[Device.deviceID];
 let config;
 if (result && result['prop.s_auth_config']) {
   config = result['prop.s_auth_config']
 }
 if (config) {
   try {
     let authJson = JSON.parse(config);
     console.log('auth config ', authJson)
     alreadyAuthed = authJson.privacyAuthed && true;
   } catch (err) {
     //json解析失败,不处理
   }
 }
 if (alreadyAuthed) {
   //已授权,不再弹窗显示
   alert("已经授权")
   return new Promise.resolve("已经授权")
 } else {
   return Host.ui.alertLegalInformationAuthorization(options).then(res => {
     console.log('授权结果', res)
     if (res) {
       return Service.smarthome.batchSetDeviceDatas([{ did: Device.deviceID, props: { "prop.s_auth_config": JSON.stringify({ 'privacyAuthed': 'true' }) } }])
     } else {
       return new Promise.reject("取消授权")
     }
   })
 }
}).catch(err => {
  //没能授权成功
 alert('授权错误'+err)
 Package.exit()
});

(static) canOpenStorePage() → {Promise}

是否支持商城

Returns:
Type
Promise
Example
Host.ui.canOpenStorePage().then(res => console("can open store = ", res))

(static) checkStoreSupporttedOnAndroid() → {boolean}

检测Android是否支持集成了商城,目前是通过当前的服务来判断的

Deprecated:
  • 方法存在问题,废弃
Returns:
Type
boolean

(static) dismissBLESwitchGuide()

隐藏提示用户打开蓝牙的动画示意图, 仅在iOS下有效,Android下无反应

Since:
  • 10004

(static) getDevicesWithModel(model) → {Promise.<Array.<devices>>}

获取设备列表中指定model的设备信息

Parameters:
Name Type Description
model string

设备model

Returns:
Type
Promise.<Array.<devices>>

(static) keepScreenNotLock(flag)

是否保持屏幕常亮

Parameters:
Name Type Description
flag Boolean

默认false

(static) openAddDeviceGroupPage(groupModel)

打开创建设备组页,如果是支持Mesh的设备,请使用上面的openMeshDeviceGroupPage

Parameters:
Name Type Description
groupModel String

设备组model 打开创建设备组页,只有在设备页内,需要创建设备组时,才能调用此方法。如果是设备组页面内,请使用下面的openEditDeviceGroupPage方法 只有特定设备支持创建设备组统一管理

(static) openAddToDesktopPage()

添加桌面快捷方式

(static) openBleMeshDeviceUpgradePage()

打开Mesh设备固件升级页。分享的设备点击此接口无反应(理论上分享的设备不应该出现调用此接口的菜单)

Since:
  • 10025

(static) openBtGatewayPage()

打开蓝牙网关页

(static) openChangeDeviceName()

打开重命名对话框

(static) openConnectSucceedPage(model, did)

打开设备快连成功页面

Parameters:
Name Type Description
model string

设备model

did string

设备did

Since:
  • 10004

(static) openCountDownPage(isCountDownOn, setting)

开启倒计时界面

Parameters:
Name Type Description
isCountDownOn Boolean

设备的当前状态:YES 为开启,所以我们启动关闭倒计时; NO 为关闭,所以我们启动开启倒计时

setting object

设置倒计时页面的属性

Properties
Name Type Description
onMethod string

指硬件端,打开 倒计时应该 执行的方法,请咨询硬件工程师

onParam string

指硬件端,打开 倒计时应该 传入的参数,请咨询硬件工程师

offMethod string

指硬件端,关闭 倒计时应该 执行的方法,请咨询硬件工程师

offParam string

指硬件端,关闭 倒计时应该 传入的参数,请咨询硬件工程师

identify string

since 10021, 用于设置倒计时的identify

Example
Host.ui.openCountDownPage(true, {onMethod:"power_on", offMethod:'power_off', onParam:'on', offParam:'off'})

(static) openDeleteDevice(titleopt)

弹出删除设备的对话框

Parameters:
Name Type Attributes Default Description
title string <optional>
null

自定义提示,不设置使用默认提示

(static) openDeleteDeviceWithCallback()

删除设备 注意:此方法只做删除设备的活,不会返回上一页。所以在then里面,需要自己调用closeCurrentPage

(static) openDevice(did, model, params) → {Promise.<json>}

打开用户账号下某一设备的插件

Parameters:
Name Type Description
did string

设备的did

model string

设备的model

params object

额外参数,打开插件时传入,也有部分特殊功能定义字段如下:

Properties
Name Type Attributes Default Description
dismiss_current_plug boolean <optional>
true

since 10020 。是否在推出新的插件页面时,关掉当前页面,返回app首页。iOS Only

Returns:

打开插件失败,返回错误信息;打开插件成功,无回调信息

Type
Promise.<json>

(static) openDeviceNetworkInfoPage()

打开设备网络信息页面,米家已提供入口:设置 - 更多设置 - 网络信息。此方法只针对wifi设备,combo设备,蓝牙设备请不要调用此方法。

Since:
  • 10026

(static) openDeviceTimeZoneSettingPage({"sync_device":)

打开设备时区设置页 apiLevel在10025,增加参数的支持,APP修改时区是否需要同步到设备端,前提是设备需要支持miIO.set_timezone 方法 如果sync_device为true,服务端会给设备发送rpc,例如: {'method':'miIO.set_timezone','params':["Asia/Chongqing"]}

Parameters:
Name Type Description
{"sync_device": Object

false} true-需要同步给设备 false-不需要同步给设备(默认)

Since:
  • 10025

(static) openDeviceUpgradePage()

打开设备检查固件升级页

(static) openEditDeviceGroupPage(dids)

打开编辑设备组页,只有在设备组页内,需要修改设备组时,才能调用此方法。如果是设备页面内,请使用上面的openAddDeviceGroupPage方法

Parameters:
Name Type Description
dids Array

包含组设备did的数组

(static) openFeedbackInput()

打开反馈页

(static) openHelpPage()

打开常见问题页,别名「使用帮助」

(static) openIftttAutoPage()

打开添加智能的页面

(static) openMeshDeviceGroupPage(type, did)

打开Mesh灯组 添加/编辑 页,Device.pid为17,则为Mesh设备组

Parameters:
Name Type Description
type String

需要打开创建设备组页面时,type=add,需要打开编辑设备组页面时,type=edit

did String

设备did。如果是创建,则是以当前实际设备的did为基础,进入创建灯组页面。如果是编辑,则是灯组的虚拟设备did。

Since:
  • 10021

(static) openMiPayPageForAndroid(params) → {Promise}

android 特有, 跳转到小米钱包

Parameters:
Name Type Description
params
Returns:
Type
Promise
Example
let params = {action:'issue_mifare',type:'1',product_id:'66666-00211',source_channel:'mijia'};
Host.ui.openMiPayPageForAndroid(params).then((res)=>{console.log(res)}).catch((error)=>{ console.log(error)});

(static) openNewMorePage()

Deprecated:
  • 10010 开始废弃, 后续版本会移除该方法。推荐使用 `miot/ui/CommonSetting` ios特有页面,android 不能使用 打开更多设置页面(通常包括安全设置,常见问题与用户反馈)

(static) openOneTimePassword(did, interval, digits)

打开一次性密码设置页

Parameters:
Name Type Description
did *

设备did

interval *

时间间隔,即密码组的刷新时间间隔,单位为分钟,类型为 number,传入 10 到 60 的整数

digits *

密码位数,类型为 number,传入 6 到 8 的整数

(static) openPageWithClassName(className)

打开一个原生类 className ,界面类类名 注意 用此方法打开的vc初始化时不需要传参数, 需要传参的viewController暂时还需要手动导出

Parameters:
Name Type Description
className string

类的名字

(static) openPhoneBluSettingPage()

Since:
  • 10002 android特有页面,ios 不能使用 打开手机蓝牙设置页面

(static) openPluginPage(did, pageName, pageParams)

打开用户账号下某一设备的插件,可支持跳转到插件的某一页面 至于跳转到哪个页面,需要插件方做支持,示例可以参考com.xiaomi.demo 中 Host.ui.openPluginPage 的使用 整体流程如下: 插件调用此方法openPluginPage ⬇ ️ 将参数传到native ⬇ native调用打开插件的方法,带上此处传递的参数 ⬇ native打开RN页面,将参数传递到Package.js ⬇ 支持打开内部页面的插件,通过Package.entrance获取将要跳转到哪个页面,通过Package.pageParams获取此页面需要的页面参数 ⬇ 打开插件对应页面,注意:如果isBackToMainPage为true,则需要在你的插件首页的componentDidMount中,增加跳转逻辑,反之,则应该在index.js中控制入口界面。详细使用请参考Demo中 openPluginPage、Package.entrance、Package.pageParams三个方法的使用

Parameters:
Name Type Description
did string

设备的did

pageName string

将打开插件的某一页面, 此参数将会赋值给 Package.entrance, 默认为 Entrance.Main

pageParams object

将打开插件的某一页面的参数,此参数将会赋值给 Package.entranceParams, 默认为空

Properties
Name Type Attributes Default Description
isBackToMainPage boolean <optional>
true

打开的插件页面按返回,是否需要返回到插件首页

Since:
  • 10026
Example
let pageParams = {did:Device.deviceID,model:Device.model}
Host.ui.openPluginPage(Device.deviceID, PluginEntrance.Setting, pageParams)

(static) openPluginRecommendScene(did, recommendId) → {Promise}

跳转到设备定向推荐界面,注意:SDK_10024及其之后才可使用

Parameters:
Name Type Description
did String
recommendId number
Since:
  • 10024
Returns:
Type
Promise

(static) openPowerMultikeyPage(did, mac)

更多设置-多键开关设置页面

Parameters:
Name Type Description
did string

设备did 指定设备ID

mac string

设备mac option, 在不传递时。默认使用当前设备

Since:
  • 10010 ,SDKLevel 10010 开始提供使用
Example
Host.ui.openPowerMultikeyPage(did, mac);

(static) openPrivacyLicense(licenseTitle, licenseUrl, policyTitle, policyUrl) → {Promise}

软件政策和隐私协议授权 隐私协议弹框需求: a. 所有接入米家的设备,绑定成功后第一次进插件,都需要隐私弹框,后续再进不需弹框 b. 取消隐私授权/解绑设备后,重新绑定设备,仍需遵循规则a 插件端可按如下方案实现:

  1. 使用batchSetDeviceDatas存储一个标志位,用来记录是否“隐私弹框”过
  2. 进入插件时batchGetDeviceDatas获取此标志位,若为NO,弹框,同时设置标志位为YES;若为YES,不弹框
  3. 设备取消授权或解绑设备时,此标志位米家后台会自动清除,故遵循了上述需求b
  4. 异常处理:进插件时,如果网络异常等原因导致batchGetDeviceDatas失败,就不弹框(此时99%情况是第2+次进插件)
Parameters:
Name Type Description
licenseTitle string

optional 可以为空

licenseUrl string

optional require('资源的相对路径')

policyTitle string

不可以为空

policyUrl string

不可以为空 require('资源的相对路径')

Deprecated:
  • 10023废弃, 请使用 alertLegalInformationAuthorization 替换
Returns:
Type
Promise

(static) openRoomManagementPage()

打开房间设备管理的页面

(static) openSecuritySetting()

打开安全管理页

(static) openShareDevicePage()

打开分享设备的页面

(static) openShareListBar(title, description, imagePath, url)

打开分享列表页面

Parameters:
Name Type Description
title string
description string
imagePath string

和Image source 一样的格式

url string

(static) openShopPage(gid)

打开商城某商品详情页面

Parameters:
Name Type Description
gid string

商品ID

(static) openShopSearchPage(keyword)

打开商城搜索结果页面

Parameters:
Name Type Description
keyword string

搜索关键字

Since:
  • 10024

(static) openTimerSettingPage(onMethod, onParam, offMethod, offParam)

这个api 应该可以废弃了,使用下面的openTimerSettingPageWithOptions

Parameters:
Name Type Description
onMethod string

定时到时设备“开”执行的 RPC 指令命令字字符串

onParam string

定时到时设备“开”执行的 RPC 指令参数字符串(目前仅支持单参数)

offMethod string

定时到时设备“关”执行的 RPC 指令命令字字符串

offParam string

定时到时设备“关”执行的 RPC 指令参数字符串(目前仅支持单参数)

Deprecated:
  • 10004 开始废弃, 后续版本会移除该方法。

(static) openTimerSettingPageWithCustomIdentifier(customTimerIdentifier, onMethod, onParam, offMethod, offParam)

这个api 应该可以废弃了,使用下面的openTimerSettingPageWithOptions

Parameters:
Name Type Description
customTimerIdentifier string

自定义定时Identifier

onMethod string

定时到时设备“开”执行的 RPC 指令命令字字符串

onParam string

定时到时设备“开”执行的 RPC 指令参数字符串(目前仅支持单参数)

offMethod string

定时到时设备“关”执行的 RPC 指令命令字字符串

offParam string

定时到时设备“关”执行的 RPC 指令参数字符串(目前仅支持单参数)

Deprecated:
  • 10004 开始废弃, 后续版本会移除该方法。

(static) openTimerSettingPageWithOptions(options)

扩展自 openTimerSettingPageWithVariousTypeParams , 新增支持自定义name使用

Parameters:
Name Type Description
options object

配置信息

Properties
Name Type Description
onMethod string

配置定时开启的 method 名,同上面openTimerSettingPageWithVariousTypeParams的参数onMethod

onParam string

配置定时开启的 参数,同上面openTimerSettingPageWithVariousTypeParams的参数onParam

offMethod string

配置定时关闭的 method 名,同上面openTimerSettingPageWithVariousTypeParams的参数offMethod

offParam string

配置定时关闭的 参数,同上面openTimerSettingPageWithVariousTypeParams的参数offParam

displayName string

配置场景日志显示的名称

identify string

自定义定时Identifier

onTimerTips string

定时列表页面、设置时间页面 打开副标题(默认:开启时间)

offTimerTips string

定时列表页面、设置时间页面 关闭时间副标题(默认:关闭时间)

listTimerTips string

定时列表页面 定时时间段副标题(默认:开启时段)

bothTimerMustBeSet boolean

是否强制要求设置时间段? true: 强制设置时间段(默认:false)如果设置true,忽略下面三个参数

showOnTimerType boolean

是否可以创建:定时开启? true: 可以,false:不可以(默认:true)

showOffTimerType boolean

是否可以创建:定时关闭? true: 可以,false:不可以(默认:true)

showPeriodTimerType boolean

是否可以创建:时间段定时? true: 可以,false:不可以(默认:true) 注意:showOnTimerType、showOffTimerType、showPeriodTimerType三个参数至少有一个为true,才有效,否则三个中任意都会被忽略掉

Since:
  • 10010 ,SDKLevel 10010 开始提供使用
Example
Host.ui.openTimerSettingPageWithOptions({onMethod:"power_on", onParam: "on", offMethod: "power_off", offParam: "off", displayName:"设置xxx定时",identify:"plug_usb_countdowm"})

(static) openTimerSettingPageWithVariousTypeParams(onMethod, onParam, offMethod, offParam)

Parameters:
Name Type Description
onMethod string

定时到时设备“开”执行的 RPC 指令命令字字符串,指硬件端,打开定时应该执行的方法,请咨询硬件工程师,miot-spec下,一般为:set_properties

onParam json

定时到时设备“开”执行的 RPC 指令参数,可以是字符串、数字、字典、数组,指硬件端,打开定时应该传入的参数,请咨询硬件工程师,iot-spec下,一般为:[{did,siid,piid,value}]

offMethod string

定时到时设备“关”执行的 RPC 指令命令字字符串,,参数请与嵌入式的同学沟通,指硬件端,关闭定时应该执行的方法,请咨询硬件工程师,miot-spec下,一般为:set_properties

offParam json

定时到时设备“关”执行的 RPC 指令参数,可以是字符串、数字、字典、数组,指硬件端,关闭定时应该传入的参数,请咨询硬件工程师,miot-spec下,一般为:[{did,siid,piid,value}]

Example
Host.ui.openTimerSettingPageWithVariousTypeParams("power_on", ["on", "title"], 'off',"title"}),

(static) openVoiceCtrlDeviceAuthPage()

打开语音设备管理的页面

(static) openWebPage(url)

打开H5页面 不对外提供

Parameters:
Name Type Description
url string

链接地址

(static) openXiaoAiLearnPage(clientId, did, aiMiotClientId, aiClientId, aiVersion)

打开小爱训练计划

Parameters:
Name Type Description
clientId string
did string

设备 ID

aiMiotClientId string

米家的客户端 ID

aiClientId string

水滴平台的客户端

aiVersion string

"" 不隐藏 "thirdpart" 隐藏 “一段录音” “设备控制” 按钮 "audio" 隐藏 “一段录音” 按钮 "device" 隐藏 “设备控制” 按钮

(static) openZigbeeConnectDeviceList(did)

打开Zigbee 网关插件开启子设备快连

Parameters:
Name Type Description
did string

网关设备did

Since:
  • 10020

(static) previewLegalInformationAuthorization(option) → {Promise}

查看隐私政策和用户协议信息, 支持显示用户体验计划

Parameters:
Name Type Description
option object

配置数据

Properties
Name Type Attributes Default Description
privacyURL string

隐私协议本地资源

agreementURL string <optional>

用户协议本地资源,未设置时如果hideAgreement=false,显示为默认的用户协议

experiencePlanURL string <optional>

用户体验计划本地资源,为空时如果hideUserExperiencePlan=false,则显示米家默认用户体验计划

hideAgreement boolean <optional>
false

是否隐藏用户协议,默认显示用户协议

hideUserExperiencePlan boolean <optional>
false

是否隐藏用户体验计划,默认显示用户体验计划

Since:
  • 10023
Returns:

授权结果

Type
Promise

(static) privacyAndProtocolReview(licenseTitle, licenseUrl, policyTitle, policyUrl)

查看软件政策和隐私协议

Parameters:
Name Type Description
licenseTitle string

optional 可以为空

licenseUrl string

optional require('资源的相对路径')

policyTitle string

不可以为空

policyUrl string

不可以为空 require('资源的相对路径')

Deprecated:
  • 10023废弃, 请使用 previewLegalInformationAuthorization

(static) refreshDeviceList() → {Promise}

刷新设备列表,同时刷新设备列表页UI

Since:
  • 10025
Returns:
Type
Promise

(static) showBLESwitchGuide()

显示提示用户打开蓝牙的动画示意图, 仅在iOS下有效,Android下无反应

Since:
  • 10004