1# 泛Sensor子系统Changelog
2
3
4## cl.vibrator.1 新增自定义振动相关属性
5
6新增自定义振动效果属性VibrateFromFile,自定义振动配置文件描述符属性HapticFileDescriptor;振动下发接口startVibration支持的振动效果由VibrateEffect = VibrateTime | VibratePreset扩展为VibrateEffect = VibrateTime | VibratePreset | VibrateFromFile。
7
8**变更影响**
9
10基于OpenHarmony4.0.8.2及之后的SDK版本开发的应用,可使用VibrateFromFile属性在支持自定义振动的设备上播放自定义振动文件中配置的振动序列。
11
12**关键接口/组件变更**
13
14@ohos.vibrator.d.ts中新增属性VibrateFromFile,HapticFileDescriptor。
15
16| 模块名 | 类名 | 方法/属性/枚举/常量 | 变更类型 |
17|  -- | -- | -- | -- |
18| @ohos.vibrator.d.ts | vibrator | HapticFileDescriptor | 新增 |
19| @ohos.vibrator.d.ts | vibrator | VibrateFromFile | 新增 |
20
21**适配指导**<br>
22
23通过资源管理接口获取振动配置文件资源,启动自定义振动并停止。
24
25```ts
26import vibrator from '@ohos.vibrator';
27import resourceManager from '@ohos.resourceManager';
28
29const FILE_NAME = "xxx.json";
30
31async function openResource(fileName) {
32    let fileDescriptor = undefined;
33    let mgr = await resourceManager.getResourceManager();
34    await mgr.getRawFd(fileName).then(value => {
35        fileDescriptor = {fd: value.fd, offset: value.offset, length: value.length};
36        console.log('openResource success fileName: ' + fileName);
37    }).catch(error => {
38        console.log('openResource err: ' + error);
39    });
40    return fileDescriptor;
41}
42
43async function closeResource(fileName) {
44    let mgr = await resourceManager.getResourceManager();
45    await mgr.closeRawFd(fileName).then(()=> {
46        console.log('closeResource success fileName: ' + fileName);
47    }).catch(error => {
48        console.log('closeResource err: ' + error);
49    });
50}
51
52// 获取振动文件资源描述符
53let rawFd = openResource(FILE_NAME);
54// 使用startVibration、stopVibration需要添加ohos.permission.VIBRATE权限
55try {
56    // 启动自定义振动
57    vibrator.startVibration({
58        type: "file",
59        hapticFd: { fd: rawFd.fd, offset: rawFd.offset, length: rawFd.length }
60    }, {
61        usage: "alarm"
62    }).then(() => {
63        console.info('startVibration success');
64    }, (error) => {
65        console.info('startVibration error');
66    });
67    // 停止所有类型的马达振动
68    vibrator.stopVibration(function (error) {
69        if (error) {
70            console.log('error.code' + error.code + 'error.message' + error.message);
71            return;
72        }
73        console.log('Callback returned to indicate successful.');
74    })
75} catch (error) {
76    console.info('errCode: ' + error.code + ' ,msg: ' + error.message);
77}
78// 关闭振动文件资源
79closeResource(FILE_NAME);
80```
81