| fix: Inconsistent with Android in repeated vibration mode Co-authored-by: zheng-jun-feng<949815885@qq.com> # message auto-generated for no-merge-commit merge: merge master into master fix: Inconsistent with Android in repeated vibration mode Created-by: zheng-jun-feng Commit-by: zheng-jun-feng Merged-by: huangyouhua Description: <!-- 请在合并之前删除注释代码,以避免将其包含在GIT历史记录中 --> # 描述 <!-- 简要描述PR的目的,例如: 这条PR主要实现metro局域网内远程调试的功能. --> 修复72重复震动模式与安卓不一致的问题 # 变更日志 <!-- 列出可包含在变更日志中的要点的主要变更。 不要列出内部更改。请以下列开头来写每个变更点: - added - fixed - deprecated - removed 如果是一条新增属性的变更,则以[added]开头,例如: - [added] FlatList组件新增inverted属性 --> # 测试步骤 <!-- 如何测试这条PR。例如: 1. 打开Tester工程. 2. 执行npm run start命令. ... --> demo: `` import React, { useState, useEffect } from 'react'; import { StyleSheet, Button, View, Vibration, Text } from 'react-native'; const App = () => { const [vibrationPattern] = useState([5000, 3000, 5000, 1000]); // 当重复震动开始第二轮之后的现象: // 72 第三个数振动,第一,二,四个数之和为间隔 // 安卓 第一个数间隔,第二个数震动,第三个数间隔,第四个数震动 const [time, setTime] = useState(0); const [isVibrating, setIsVibrating] = useState(false); useEffect(() => { let interval = null; if (isVibrating) { interval = setInterval(() => { setTime(prevTime => prevTime + 1); }, 1000); } else { clearInterval(interval); setTime(0); // 重置时间 } return () => clearInterval(interval); }, [isVibrating]); const startVibrationWithPattern = () => { Vibration.vibrate(vibrationPattern, true); setIsVibrating(true); }; const stopVibrationAndResetTimer = () => { Vibration.cancel(); setIsVibrating(false); }; const vibrateOnce = () => { Vibration.vibrate(400); }; const vibrateWithPattern = () => { Vibration.vibrate(vibrationPattern, false); }; return ( <View style={styles.container}> {/* 秒表 */} <Text style={styles.timerText}>{时间: ${Math.floor(time / 60)}:${(time % 60).toString().padStart(2, '0')}}</Text> {/* 震动控制 */} <Button title="震动0.4秒" onPress={vibrateOnce} /> <View style={styles.buttonSpacer} /> <Button title="按模式震动" onPress={vibrateWithPattern} /> <View style={styles.buttonSpacer} /> <Button title="重复震动模式" onPress={startVibrationWithPattern} /> <View style={styles.buttonSpacer} /> <Button title="取消震动" onPress={stopVibrationAndResetTimer} /> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', }, buttonSpacer: { marginVertical: 15, }, timerText: { fontSize: 24, marginBottom: 20, } }); export default App; `` # 合入前自检 <!-- 请在合入前根据以下条例进行自检 自检完成后在[ ]内填入"x", 例如: - [x] 不涉及非兼容性变更;若涉及,已通过相应评审。 --> - [x] 不涉及非兼容性变更;若涉及,已通过相应评审。 - [x] 不涉及性能或已进行性能测试且无性能劣化。 - [x] 符合对应的编码规范。 - [x] 不涉及文档更新,或已更新了文档。 - [x] 针对可测试性要求,已增加必要的自测用例、合理的日志记录或Trace信息。 - [x] 不存在非法的文件引入,包括图片和代码等 - [] 本PR已经在77分支开启PR或不需要在77分支合入 - 如需合入77分支,PR地址: See merge request: openharmony-sig/ohos_react_native!1069 | 1 年前 |