调用Alarm.setBuiltInAlarmStatus无法修改告警状态

小程序开发相关产品技术讨论,包括面板、智能小程序、React Native、Ray跨端框架、Panel SDK、微信小程序、小程序开发工具(IDE)及其他开发技术相关等话题


Post Reply
feige2023
Posts: 25

  • Tuya MiniApp IDE 版本信息:2.3.10
    • App 应用版本信息:1.0.5
    • @ray-js/ray, @ray-js/panel-sdk的版本 :1.10.0
    • 移动设备信息:
    • 相关代码:

      Code: Select all

      import React, { Fragment,useCallback, useEffect } from 'react';
      import {Button, View } from '@ray-js/ray';
      import { Card } from '@/components/card';
      import { Title } from './components/title';
      import { IconFont} from '@/components';
      import { RadioGroup} from './components/radioGroup';
      import { Text,Image } from '@ray-js/ray';
      import Strings from '@/i18n';
      import { useConfig } from './useConfig';
      import { Dialog, Empty } from '@ray-js/smart-ui';
      import Layout from '@/components/layout';
      import { PopupView } from '@/components/popup';
      import Styles from './index.module.less';
      import { useProps } from '@ray-js/panel-sdk';
      import { useActions } from '@ray-js/panel-sdk';
      import { Switch, Divider } from '@ray-js/smart-ui';
      import { useState } from 'react';
      import { SmartAlarmAbility } from '@ray-js/panel-sdk';
      import { getLangKey } from '@ray-js/ray';
      import { HomeRes } from '@/res/images';
      import { Slider,Popup,Picker } from '@ray-js/smart-ui';

      export function Setting() {

      const [alarmList,setAlarmList] = useState([]);
      const Alarm = new SmartAlarmAbility();

      // 初始化
      useEffect(() => {
      const init = async () => {
      await Alarm.init();
      const alarms = await Alarm.getBuiltInAlarmList();
      updateAlarms(alarms);
      }
      init();
      },[]);
      //
      function updateAlarms(alarms:any)
      {
      const maps = [];
      alarms.foreach(item=>{
      maps.push({
      'name':item.i18nData.name['en'],
      'id':item.id,
      'enable':item.enable
      })
      });
      setAlarmList(maps);
      }
      ///设置状态
      async function setAlarmStaus(id:string,status:boolean)
      {
      console.log("setAlarmStatus:",id,"disabled:",status);
      try{
      const [result,newAlarms] = await Alarm.setBuiltInAlarmEnable(id,status);

      console.log("setAlarmStatus result:",result);
      if(result){
      updateAlarms(newAlarms);
      }
      }catch(e){
      console.log("设置状态错误",e);
      }
      }

      return (
      <View>
      {/** 忽略不相关代码 */}
      {
      alarmList.map((item,index)=>{
      return (
      <View key={index}>
      <Text>{item.name}</Text>
      <Switch checked={item.enable} onChange={(event)=>{setAlarmStaus(item.id,!event.detail)}}></Switch>
      </View>
      )
      })
      }
      </View>
      )
      }
      上述代码为关键代码,屏蔽了一些项目敏感信息。通过上述代码,能获取到的Alarm列表并正确显示,其中一个id为"LLuN3IhnGAvWbFD3",点击关闭告警,从IDE中的日志也可以获知,能打印正确的。具体参考附件

      Code: Select all

      - 日志信息:~错误日志或 IDE 运行日志等~
      
      - 问题描述(复现步骤):
      
      - 预期结果:能通过Switch切换该警告的状态
      
      - 实际结果:无法通过Switch切换
Attachments
setBuiltInAlarmStatus无法修改告警状态的相关截图.zip
(221.87 KiB) Downloaded 10 times

Tags:
lshinylee
Posts: 361

Re: 调用Alarm.setBuiltInAlarmStatus无法修改告警状态

根据你提供附件网络请求里的所分析,大概率是因为 disabled 入参传反了。

:D :D :D

feige2023
Posts: 25

Re: 调用Alarm.setBuiltInAlarmStatus无法修改告警状态

您好,我确定传入的参数中,disabled中传入的true,日志打印的如下

setAlarmStatus: LLuN3IhnGAvWbFD3 disabled: true
setAlarmStatus result: true
newAlarmList: (2) [{…}, {…}]
我也尝试过将disabled的状态改为false,网络请求还是跟附件截图中的一样。

没有脱敏的setAlarmStatus API。

Code: Select all

async function setAlarmStatus(id:string,status:boolean){
console.log("setAlarmStatus:",id,"disabled:",status);
try{

const [result,newAlarmList] = await Alarm.setBuiltInAlarmStatus({disabled:status,ruleIds:id});//'LLuN3IhnGAvWbFD3'
initCustomAlarm(langKey,newAlarmList);
console.log("setAlarmStatus result:",result);
console.log("newAlarmList:",newAlarmList);
}catch(err){
console.log("setAlarmStatus err:",err);
}
}
Post Reply