HarmonyOS鸿蒙Next中调用OH_Input_AddKeyEventMonitor时报错
HarmonyOS鸿蒙Next中调用OH_Input_AddKeyEventMonitor时报错
参考链接 代码,添加按键事件监听的时候,报错:
05-23 06:47:09.997 4477-5574 C02801/PermissionHelper cn.orange...lication E [][VerifySystemApp:44] system api is called by non-system app
05-23 06:47:09.998 4477-5574 C02800/OHInputManager cn.orange...lication E [][OH_Input_AddKeyEventMonitor:1187] The screen capture is not working
报错在社区也搜不到,请问这个问题该怎么解决呀?
更多关于HarmonyOS鸿蒙Next中调用OH_Input_AddKeyEventMonitor时报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
从你提供的错误日志来看,这是一个关于鸿蒙系统应用开发的权限问题。错误信息 system api is called by non-system app
表明你正在尝试调用一个系统级别的API,但当前应用没有被系统授予相应的权限。
错误原因分析
- 权限不足:
OH_Input_AddKeyEventMonitor
是一个系统级别的API,通常只有系统应用才能调用。你的应用可能没有被标记为系统应用,因此被系统拒绝访问。 - 签名问题:在鸿蒙系统中,系统API的访问通常需要应用使用特定的证书进行签名。如果你的应用使用的是普通开发者签名,将无法调用这些API。
- 配置缺失:即使应用被签名为系统应用,还需要在配置文件中声明相应的权限。
解决方法
1. 检查并声明必要的权限
确保你的应用在 config.json
文件中声明了所有必要的权限:
{
"module": {
"reqPermissions": [
{
"name": "ohos.permission.INPUT_KEY_EVENT",
"reason": "需要监听按键事件",
"usedScene": {
"ability": [
"com.example.yourapp.MainAbility"
],
"when": "always"
}
}
]
}
}
2. 确认应用签名类型
系统API通常只能由系统应用调用。如果你需要使用这些API,你可能需要:
- 使用系统级别的签名证书(这通常需要与设备制造商合作)
- 考虑是否有替代的公共API可以实现相同的功能
3. 使用公共API替代方案
如果可能,尽量使用鸿蒙SDK提供的公共API,而不是系统级API。例如,对于按键事件监听,可以考虑使用UI框架提供的标准事件处理机制:
// 使用ArkTS的UI框架事件处理
@Entry
@Component
struct KeyEventDemo {
build() {
Column() {
// 其他组件
}
.width('100%')
.height('100%')
.onKeyEvent((event: KeyEvent) => {
console.info(`Key pressed: ${event.keyCode}`)
return false; // 返回false表示继续传播事件
})
}
}
4. 设备特定权限
如果你的应用是为特定设备或系统定制的,你可能需要联系设备制造商获取系统级别的签名权限。
注意事项
- 系统API的使用受到严格限制,通常用于系统组件或特权应用
- 在开发过程中,建议优先使用公共API,以确保应用的兼容性和可发布性
- 如果你的应用确实需要系统级权限,你可能需要通过华为开发者支持渠道获取特殊权限
更多关于HarmonyOS鸿蒙Next中调用OH_Input_AddKeyEventMonitor时报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我也怀疑过是权限问题,但是按照自动签名的文档链接,当前支持通过自动签名申请需要ACL权限的清单里,是有ohos.permission.INPUT_MONITORING的,讲道理在本地开发阶段,应该是能使用的吧。
楼主你好,开发的设备相关的版本信息方便提供下吗?
处理器: AMD Ryzen 7 7735HS with Radeon Graphics 3.20 GHz
机带 RAM: 32.0 GB (28.7 GB 可用)
系统类型: 64 位操作系统, 基于 x64 的处理器
笔和触控: 没有可用于此显示器的笔或触控输入
版本: Windows 11 专业版
版本号: 23H2
安装日期: 2023/7/2
操作系统版本: 22631.5335
体验 Windows 功能体验包: 1000.22700.1081.0
把下面html内容转换成Markdown格式,要求:
- 转换的时候需要去掉复制和深色代码主题
- 输出的内容不显示“基本信息”
- html代码中有图片需要转换成markdown格式
- html代码中没有图片请不要加上图片
- html中img标签的地址为空的话不输出,不转换
- 输出内容的时候不需要解释,不需要建议
- 只需要输出转换完毕的Markdown文档,不需要输出其他内容
- 内容中没有图片或者图片为空的话不要加图片
- 不要在内容中加https://example.com/image.jpg这样的图片
内容如下:看代码是在添加按键事件,程序是运行在2in1设备上?是不是有些权限没申请?
我看受限权限的文档[1],说调试阶段可以通过DevEco Studio自动签名完成申请,发布阶段才需要手动申请,但怎么整都不行。我已经按手动申请的步骤提交了,等申请通过再试试吧,
在HarmonyOS Next中调用OH_Input_AddKeyEventMonitor报错可能涉及以下原因:
-
权限未配置:检查是否在config.json中声明了ohos.permission.INPUT_MONITORING权限
-
接口调用时机不当:确保在UIAbility的onWindowStageCreate之后调用
-
参数错误:确认回调函数格式符合InputEventMonitor定义
-
版本兼容性问题:鸿蒙Next可能调整了输入事件监听的实现机制
-
资源未释放:检查是否有未释放的InputEventMonitor实例
需核对官方文档确认OH_Input_AddKeyEventMonitor在Next版本中的正确用法。错误代码可帮助定位具体问题。
从错误日志来看,这是两个关键问题导致的:
-
权限问题: 错误日志显示"system api is called by non-system app",说明OH_Input_AddKeyEventMonitor是一个系统API,需要系统应用权限才能调用。普通应用无法直接使用这个接口。
-
功能限制: "screen capture is not working"表明该API可能还需要屏幕捕获权限或其他相关功能支持。
解决方案:
- 确认应用类型:确保你的应用是系统应用,具有系统签名权限。
- 检查manifest配置:需要在config.json中声明系统权限。
- 替代方案:如果是普通应用,考虑使用标准的输入事件监听API,如@ohos.app.ability.common中的KeyEvent监听。
注意:HarmonyOS Next对系统API调用有严格限制,非系统应用无法绕过这些限制。