更新记录
0.0.1(2026-03-06)
- 初始版本发布
- 支持监听设备握持手势状态
- 支持检测左手、右手、双手握持等状态
- 提供
on、off、once、isListeningAPI
平台兼容性
uni-app(4.87)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.87)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | √ | - |
lime-holding-hand
一个用于监听设备握持手势状态的UTS插件,支持检测设备的握持方式(左手、右手、双手等)。
安装方法
- 在uni-app插件市场中搜索并导入
lime-holding-hand - 仅支持鸿蒙
- uniappx支持试用,uniapp只能源码
快速开始
import { holdingStatusMonitor } from '@/uni_modules/lime-holding-hand';
// 定义状态映射
const map = new Map([
[0, '未握持'],
[1, '左手握持'],
[2, '右手握持'],
[3, '双手握持'],
[16, '未识别'],
[-1, '监听出错']
]);
// 监听握持状态
const onHoldingChange = (data) => {
if (data.holdingHandStatus == -1) {
console.error('监听失败:', data.errMsg);
console.error('错误码:', data.statusCode);
return;
}
const statusText = map.get(data.holdingHandStatus) ?? '未知状态';
console.log('当前握持状态:', statusText);
};
// 开始监听
holdingStatusMonitor.on(onHoldingChange);
// 检查监听状态
console.log('是否正在监听:', holdingStatusMonitor.isListening());
// 页面卸载时取消监听
onUnmounted(() => {
holdingStatusMonitor.off(onHoldingChange);
});
示例:根据握持状态调整悬浮按钮位置
<l-fab :offset="offset">
<l-icon size="24px" color="white" name="menu"></l-icon>
</l-fab>
import { holdingStatusMonitor, type HoldingHandResult } from '@/uni_modules/lime-holding-hand';
const offset = ref([-1, 350])
const onHoldingChange = (data: HoldingHandResult) => {
if (data.holdingHandStatus == -1) {
console.error('监听失败:', data.errMsg);
console.error('错误码:', data.statusCode);
return;
}
// 左手握持时,悬浮按钮靠左
if (data.holdingHandStatus == 1) {
offset.value[0] = 0
}
// 右手握持时,悬浮按钮靠右
else if (data.holdingHandStatus == 2) {
offset.value[0] = -1
}
// 触发响应式更新
offset.value = [...offset.value]
};
holdingStatusMonitor.on(onHoldingChange);
onUnmounted(() => {
holdingStatusMonitor.off(onHoldingChange);
});
API
holdingStatusMonitor
握持手势状态监听器,提供静态方法用于监听设备握持状态变化。
方法
on(callback)
开始监听握持手势变化。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | HandStatusCallback |
是 | 握持状态变化时的回调函数 |
回调参数
回调函数接收 HoldingHandResult 对象:
| 属性名 | 类型 | 说明 |
|---|---|---|
| holdingHandStatus | number |
握持状态值,详见握持状态说明 |
| statusCode | number |
状态码,成功时为 0,失败时为错误码 |
| errMsg | string |
状态信息,成功时为 'ok',失败时为错误信息 |
示例
import { holdingStatusMonitor } from '@/uni_modules/lime-holding-hand';
const callback = (data) => {
console.log('握持状态:', data.holdingHandStatus);
console.log('状态码:', data.statusCode);
console.log('信息:', data.errMsg);
};
holdingStatusMonitor.on(callback);
off(callback?)
取消监听握持手势变化。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | HandStatusCallback |
否 | 要取消的回调函数,不传则清除所有回调 |
示例
// 取消指定回调
holdingStatusMonitor.off(callback);
// 取消所有回调
holdingStatusMonitor.off();
once(callback)
一次性监听,触发一次后自动取消。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | HandStatusCallback |
是 | 握持状态变化时的回调函数 |
示例
holdingStatusMonitor.once((data) => {
console.log('仅触发一次:', data.holdingHandStatus);
});
isListening()
获取当前监听状态。
返回值
| 类型 | 说明 |
|---|---|
boolean |
是否正在监听 |
示例
const isListening = holdingStatusMonitor.isListening();
console.log('是否正在监听:', isListening);
握持状态说明
holdingHandStatus 可能的值:
| 名称 | 值 | 说明 |
|---|---|---|
| NOT_HELD | 0 | 表示未握持 |
| LEFT_HAND_HELD | 1 | 表示左手握持 |
| RIGHT_HAND_HELD | 2 | 表示右手握持 |
| BOTH_HANDS_HELD | 3 | 表示双手握持 |
| UNKNOWN_STATUS | 16 | 表示未识别 |
| - | -1 | 表示监听出错(非原生状态) |
错误码说明
statusCode 可能的错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | 权限被拒绝。尝试订阅 holdingHandChanged 事件被权限 ohos.permission.DETECT_GESTURE 禁止。 |
| 801 | 能力不支持。由于设备能力有限,功能无法正常工作。 |
| 31500001 | 服务异常。可能原因:1. 系统错误,如空指针、容器相关异常;2. N-API 调用异常,无效的 N-API 状态。 |
| 31500002 | 订阅失败。可能原因:1. 回调注册失败;2. 绑定原生对象到 JS 包装器失败;3. N-API 调用异常,无效的 N-API 状态;4. IPC 请求异常。 |
支持与赞赏
如果你觉得本插件解决了你的问题,可以考虑支持作者:
| 支付宝赞助 | 微信赞助 |
|---|---|
![]() |
![]() |

收藏人数:
购买源码授权版(
试用
赞赏(0)


下载 69328
赞赏 544
下载 11349054
赞赏 1869
赞赏
京公网安备:11010802035340号