Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
J
jensen
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Skye Yu
jensen
Commits
4162afb7
Commit
4162afb7
authored
Jan 09, 2026
by
martin hou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
doc: 完善文档
parent
1e9d5afd
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
34 deletions
+28
-34
README.md
README.md
+28
-34
No files found.
README.md
View file @
4162afb7
...
@@ -50,22 +50,16 @@
...
@@ -50,22 +50,16 @@
|----------|------|----------|
|----------|------|----------|
|
`InitializeTask`
| 初始化任务,设备连接后执行一次 | 获取设备信息、同步时间 |
|
`InitializeTask`
| 初始化任务,设备连接后执行一次 | 获取设备信息、同步时间 |
|
`TimerTask`
| 定时任务,按指定间隔循环执行 | 轮询电池状态、文件列表 |
|
`TimerTask`
| 定时任务,按指定间隔循环执行 | 轮询电池状态、文件列表 |
|
`BackgroundTask`
| 后台任务,带调度逻辑的周期任务 |
文件同步、数据上传
|
|
`BackgroundTask`
| 后台任务,带调度逻辑的周期任务 |
录音传输及后续的处理
|
|
`UserTask`
| 用户任务,
**排它性任务**
,用于用户交互操作 |
文件下载、设备配置
|
|
`UserTask`
| 用户任务,
**排它性任务**
,用于用户交互操作 |
用户点击引发的需要即时完成的操作指令
|
> ⚠️ **重要**:`UserTask` 是排它性的,当一个 UserTask 在执行时,所有定时任务和后台任务会暂停,以确保用户操作不被干扰。
> ⚠️ **重要**:`UserTask` 是排它性的,当一个 UserTask 在执行时,所有定时任务和后台任务会暂停,以确保用户操作不被干扰。
## 快速开始
## 快速开始
### 安装依赖
```
bash
npm
install
```
### 基本使用
### 基本使用
```
t
sx
```
t
ypescript
import
{
mgr
}
from
'./utils/mgr'
;
import
{
mgr
}
from
'./utils/mgr'
;
// 1. 监听自动连接事件
// 1. 监听自动连接事件
...
@@ -73,8 +67,11 @@ mgr.onautoconnect((dinfo) => {
...
@@ -73,8 +67,11 @@ mgr.onautoconnect((dinfo) => {
console
.
log
(
'设备已连接:'
,
dinfo
.
sn
);
console
.
log
(
'设备已连接:'
,
dinfo
.
sn
);
});
});
// 2. 尝试连接已授权的设备
// 2. 尝试连接已授权的设备
,可以直接触发完成自动连接
await
mgr
.
tryconnect
();
await
mgr
.
tryconnect
();
// 3. 尝试连接新设备,需要从用户事件触发
await
mgr
.
connect
();
```
```
## 设备连接管理
## 设备连接管理
...
@@ -83,7 +80,7 @@ await mgr.tryconnect();
...
@@ -83,7 +80,7 @@ await mgr.tryconnect();
当页面加载时,调用
`tryconnect()`
会自动连接所有已授权的 HiDock 设备:
当页面加载时,调用
`tryconnect()`
会自动连接所有已授权的 HiDock 设备:
```
t
sx
```
t
ypescript
import
{
mgr
}
from
'./utils/mgr'
;
import
{
mgr
}
from
'./utils/mgr'
;
// 注册连接事件监听器
// 注册连接事件监听器
...
@@ -100,7 +97,7 @@ await mgr.tryconnect();
...
@@ -100,7 +97,7 @@ await mgr.tryconnect();
如果需要让用户选择设备进行连接:
如果需要让用户选择设备进行连接:
```
t
sx
```
t
ypescript
const
dinfo
=
await
mgr
.
connect
();
const
dinfo
=
await
mgr
.
connect
();
if
(
dinfo
)
{
if
(
dinfo
)
{
console
.
log
(
'手动连接成功:'
,
dinfo
.
sn
);
console
.
log
(
'手动连接成功:'
,
dinfo
.
sn
);
...
@@ -109,7 +106,7 @@ if (dinfo) {
...
@@ -109,7 +106,7 @@ if (dinfo) {
### 监听连接状态变化
### 监听连接状态变化
```
t
sx
```
t
ypescript
mgr
.
onconnectionstatechanged
((
state
,
dinfo
)
=>
{
mgr
.
onconnectionstatechanged
((
state
,
dinfo
)
=>
{
switch
(
state
)
{
switch
(
state
)
{
case
'init'
:
case
'init'
:
...
@@ -133,7 +130,7 @@ mgr.onconnectionstatechanged((state, dinfo) => {
...
@@ -133,7 +130,7 @@ mgr.onconnectionstatechanged((state, dinfo) => {
### 断开连接
### 断开连接
```
t
sx
```
t
ypescript
await
mgr
.
close
(
sn
);
await
mgr
.
close
(
sn
);
```
```
...
@@ -151,7 +148,7 @@ UserTask 是用于用户交互操作的**排它性任务**。当你需要执行
...
@@ -151,7 +148,7 @@ UserTask 是用于用户交互操作的**排它性任务**。当你需要执行
#### 注册和释放 UserTask
#### 注册和释放 UserTask
```
t
sx
```
t
ypescript
// 注册 UserTask(带超时等待)
// 注册 UserTask(带超时等待)
const
success
=
await
mgr
.
registerTask
(
sn
,
'my-task-id'
);
const
success
=
await
mgr
.
registerTask
(
sn
,
'my-task-id'
);
if
(
!
success
)
{
if
(
!
success
)
{
...
@@ -169,9 +166,9 @@ try {
...
@@ -169,9 +166,9 @@ try {
#### 使用 getInstance 获取设备实例
#### 使用 getInstance 获取设备实例
获取 Jensen 实例时
**必须传入 UserTask 标签**
,这样所有操作都会自动验证任务有效性:
获取 Jensen 实例时
**必须传入 UserTask 标签**
,这样所有操作都会自动验证任务有效性
,这种方式更适合较复杂的场景
:
```
t
sx
```
t
ypescript
// 正确用法:传入 userTaskTag
// 正确用法:传入 userTaskTag
const
jensen
=
mgr
.
getInstance
(
sn
,
userTaskTag
);
const
jensen
=
mgr
.
getInstance
(
sn
,
userTaskTag
);
if
(
jensen
==
null
)
return
alert
(
'设备未连接'
);
if
(
jensen
==
null
)
return
alert
(
'设备未连接'
);
...
@@ -182,9 +179,9 @@ const time = await jensen.getTime(1);
...
@@ -182,9 +179,9 @@ const time = await jensen.getTime(1);
#### 使用 executeWithUserTask(推荐)
#### 使用 executeWithUserTask(推荐)
更安全的方式是使用
`executeWithUserTask`
,它会自动验证任务并执行回调:
更安全的方式是使用
`executeWithUserTask`
,它会自动验证任务并执行回调
,这种方式更适合较简单的场景
:
```
t
sx
```
t
ypescript
const
time
=
await
mgr
.
executeWithUserTask
(
sn
,
userTaskTag
,
async
(
jensen
)
=>
{
const
time
=
await
mgr
.
executeWithUserTask
(
sn
,
userTaskTag
,
async
(
jensen
)
=>
{
return
await
jensen
.
getTime
(
1
);
return
await
jensen
.
getTime
(
1
);
});
});
...
@@ -194,7 +191,7 @@ const time = await mgr.executeWithUserTask(sn, userTaskTag, async (jensen) => {
...
@@ -194,7 +191,7 @@ const time = await mgr.executeWithUserTask(sn, userTaskTag, async (jensen) => {
如果 UserTask 长时间不活动(超过 30 秒),会被自动释放。对于长时间操作,需要定期调用保活方法:
如果 UserTask 长时间不活动(超过 30 秒),会被自动释放。对于长时间操作,需要定期调用保活方法:
```
t
sx
```
t
ypescript
// 保持任务活跃
// 保持任务活跃
mgr
.
keepUserTaskAlive
(
sn
,
userTaskTag
);
mgr
.
keepUserTaskAlive
(
sn
,
userTaskTag
);
```
```
...
@@ -210,7 +207,7 @@ mgr.keepUserTaskAlive(sn, userTaskTag);
...
@@ -210,7 +207,7 @@ mgr.keepUserTaskAlive(sn, userTaskTag);
#### 注册自定义定时任务
#### 注册自定义定时任务
```
t
sx
```
t
ypescript
mgr
.
registerTimerTask
(
sn
,
{
mgr
.
registerTimerTask
(
sn
,
{
tag
:
'my-timer-task'
,
tag
:
'my-timer-task'
,
interval
:
5000
,
// 5秒执行一次
interval
:
5000
,
// 5秒执行一次
...
@@ -219,9 +216,6 @@ mgr.registerTimerTask(sn, {
...
@@ -219,9 +216,6 @@ mgr.registerTimerTask(sn, {
if
(
settings
)
{
if
(
settings
)
{
store
.
set
(
'settings'
,
settings
);
store
.
set
(
'settings'
,
settings
);
}
}
},
onComplete
:
(
success
,
data
)
=>
{
console
.
log
(
'任务完成:'
,
success
);
}
}
});
});
```
```
...
@@ -237,7 +231,7 @@ mgr.registerTimerTask(sn, {
...
@@ -237,7 +231,7 @@ mgr.registerTimerTask(sn, {
#### 注册自定义初始化任务
#### 注册自定义初始化任务
```
t
sx
```
t
ypescript
mgr
.
registerInitializeTask
(
sn
,
{
mgr
.
registerInitializeTask
(
sn
,
{
tag
:
'my-init-task'
,
tag
:
'my-init-task'
,
task
:
async
(
jensen
,
store
)
=>
{
task
:
async
(
jensen
,
store
)
=>
{
...
@@ -271,7 +265,7 @@ interface DeviceStateSchema {
...
@@ -271,7 +265,7 @@ interface DeviceStateSchema {
### 订阅状态变更
### 订阅状态变更
```
t
sx
```
t
ypescript
// 订阅电池状态变化
// 订阅电池状态变化
mgr
.
subscribeDeviceState
(
sn
,
'battery-status'
,
(
key
,
newValue
,
oldValue
)
=>
{
mgr
.
subscribeDeviceState
(
sn
,
'battery-status'
,
(
key
,
newValue
,
oldValue
)
=>
{
console
.
log
(
'电池状态更新:'
,
newValue
);
console
.
log
(
'电池状态更新:'
,
newValue
);
...
@@ -294,7 +288,7 @@ mgr.subscribeDeviceState(sn, 'recording', (key, newValue, oldValue) => {
...
@@ -294,7 +288,7 @@ mgr.subscribeDeviceState(sn, 'recording', (key, newValue, oldValue) => {
### 直接读取状态
### 直接读取状态
```
t
sx
```
t
ypescript
// 获取当前电池状态
// 获取当前电池状态
const
battery
=
mgr
.
getDeviceState
(
sn
,
'battery-status'
);
const
battery
=
mgr
.
getDeviceState
(
sn
,
'battery-status'
);
...
@@ -307,7 +301,7 @@ const isStale = mgr.isDeviceStateStale(sn, 'battery-status', 5000);
...
@@ -307,7 +301,7 @@ const isStale = mgr.isDeviceStateStale(sn, 'battery-status', 5000);
### 手动设置状态
### 手动设置状态
```
t
sx
```
t
ypescript
mgr
.
setDeviceState
(
sn
,
'settings'
,
{
mgr
.
setDeviceState
(
sn
,
'settings'
,
{
autoRecord
:
true
,
autoRecord
:
true
,
autoPlay
:
false
autoPlay
:
false
...
@@ -318,7 +312,7 @@ mgr.setDeviceState(sn, 'settings', {
...
@@ -318,7 +312,7 @@ mgr.setDeviceState(sn, 'settings', {
以下是一个完整的 React 组件示例,展示了所有核心功能的使用:
以下是一个完整的 React 组件示例,展示了所有核心功能的使用:
```
t
sx
```
t
ypescript
import
{
mgr
}
from
'./utils/mgr'
;
import
{
mgr
}
from
'./utils/mgr'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
Jensen
from
'../jensen'
;
import
Jensen
from
'../jensen'
;
...
@@ -540,7 +534,7 @@ export function DeviceManager() {
...
@@ -540,7 +534,7 @@ export function DeviceManager() {
### 1. 为什么调用 `getInstance()` 报错?
### 1. 为什么调用 `getInstance()` 报错?
确保传入了
`userTaskTag`
参数:
确保传入了
`userTaskTag`
参数:
```
t
sx
```
t
ypescript
// ❌ 错误
// ❌ 错误
const
jensen
=
mgr
.
getInstance
(
sn
);
const
jensen
=
mgr
.
getInstance
(
sn
);
...
@@ -551,14 +545,14 @@ const jensen = mgr.getInstance(sn, userTaskTag);
...
@@ -551,14 +545,14 @@ const jensen = mgr.getInstance(sn, userTaskTag);
### 2. UserTask 被自动释放了?
### 2. UserTask 被自动释放了?
UserTask 空闲超过 30 秒会被自动释放。对于长时间操作,定期调用:
UserTask 空闲超过 30 秒会被自动释放。对于长时间操作,定期调用:
```
t
sx
```
t
ypescript
mgr
.
keepUserTaskAlive
(
sn
,
userTaskTag
);
mgr
.
keepUserTaskAlive
(
sn
,
userTaskTag
);
```
```
### 3. 如何知道设备断开了?
### 3. 如何知道设备断开了?
使用
`onconnectionstatechanged`
监听:
使用
`onconnectionstatechanged`
监听:
```
t
sx
```
t
ypescript
mgr
.
onconnectionstatechanged
((
state
,
dinfo
)
=>
{
mgr
.
onconnectionstatechanged
((
state
,
dinfo
)
=>
{
if
(
state
===
'disconnected'
)
{
if
(
state
===
'disconnected'
)
{
console
.
log
(
'设备断开:'
,
dinfo
);
console
.
log
(
'设备断开:'
,
dinfo
);
...
@@ -569,7 +563,7 @@ mgr.onconnectionstatechanged((state, dinfo) => {
...
@@ -569,7 +563,7 @@ mgr.onconnectionstatechanged((state, dinfo) => {
### 4. 状态订阅如何取消?
### 4. 状态订阅如何取消?
`subscribeDeviceState`
返回取消函数:
`subscribeDeviceState`
返回取消函数:
```
t
sx
```
t
ypescript
const
unsubscribe
=
mgr
.
subscribeDeviceState
(
sn
,
'battery-status'
,
listener
);
const
unsubscribe
=
mgr
.
subscribeDeviceState
(
sn
,
'battery-status'
,
listener
);
// 取消订阅
// 取消订阅
...
@@ -592,7 +586,7 @@ npm run build
...
@@ -592,7 +586,7 @@ npm run build
### 查看设备状态快照
### 查看设备状态快照
```
t
sx
```
t
ypescript
console
.
log
(
mgr
.
dumpDeviceState
(
sn
));
console
.
log
(
mgr
.
dumpDeviceState
(
sn
));
```
```
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment