/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @addtogroup InputMethod
* @{
*
* @brief InputMethod模块提供C语言接口来使用输入法。"使用输入法"面向应用侧调用。
*
*
功能定位:该模块为应用侧开发者提供自绘输入框与输入法服务交互的完整C API,支持应用绑定/解绑输入法服务、向输入法发送请求
* 和通知、接收输入法的回调通知、配置输入框属性、管理光标和避让信息等核心功能。
*
*
使用场景:适用于使用NDK开发自绘输入框的应用,需要与系统输入法服务进行交互的场景。典型流程为:应用创建TextEditorProxy
* (文本编辑器代理)和AttachOptions(绑定配置选项),通过Controller绑定输入法服务,绑定成功后通过InputMethodProxy(输入法代
* 理)与输入法交互,使用完毕后通过Controller解绑。
*
*
使用后效果:绑定输入法后,应用可接收输入法的文本插入、删除、光标移动等回调通知,也可主动向输入法发送光标更新、选区变
* 更、私有命令等请求。解绑后,所有交互通道关闭,相关资源释放。
*
*
生命周期管理:本模块遵循严格的创建/销毁配对原则和绑定/解绑配对原则:
*
*
- 绑定/解绑配对:OH_InputMethodController_Attach必须与OH_InputMethodController_Detach配对调用,未解绑会导致输入法
* 资源泄漏。
*
- 创建/销毁配对:所有Create函数创建的对象必须通过对应的Destroy函数销毁,否则会导致内存泄漏。
*
- 调用顺序:先创建依赖对象(TextEditorProxy、AttachOptions),再执行Attach绑定,绑定成功后使用InputMethodProxy交
* 互,最后Detach解绑并销毁所有创建的对象。
*
*
线程安全:本模块的API非线程安全,建议在主线程调用。TextEditorProxy的回调执行线程可通过
* OH_TextEditorProxy_SetCallbackInMainThread配置。
*
*
模块架构: 本模块由9个头文件组成,按职责分为四层:
*
*
- 控制层:inputmethod_controller_capi.h —— 模块核心入口,提供绑定/解绑输入法服务的能力,是所有交互的起点和终点。
*
- 交互层:inputmethod_text_editor_proxy_capi.h和inputmethod_inputmethod_proxy_capi.h —— 双向交互通道。
* TextEditorProxy是输入法→应用方向的回调注册通道,应用通过它接收输入法的文本插入、删除等通知;InputMethodProxy是应用→输入法方向
* 的请求发送通道,应用通过它向输入法发送光标更新、选区变更等通知。
*
- 配置层:inputmethod_attach_options_capi.h、inputmethod_text_config_capi.h、inputmethod_cursor_info_capi.h、
* inputmethod_text_avoid_info_capi.h —— 各类配置和信息的承载对象,分别管理绑定选项、输入框配置、光标位置信息、避让区域信息。
*
- 数据层:inputmethod_private_command_capi.h和inputmethod_types_capi.h —— 私有命令数据和公共类型定义(枚举、错误
* 码等)。
*
*
典型调用流程:
*
1. 通过inputmethod_text_editor_proxy_capi.h创建TextEditorProxy并注册回调。
*
2. 通过inputmethod_attach_options_capi.h创建AttachOptions配置绑定选项。
*
3. 通过inputmethod_controller_capi.h调用Attach绑定输入法,获取InputMethodProxy。
*
4. 通过inputmethod_inputmethod_proxy_capi.h使用InputMethodProxy与输入法交互。
*
5. 通过inputmethod_text_config_capi.h、inputmethod_cursor_info_capi.h等管理配置信息。
*
6. 通过inputmethod_controller_capi.h调用Detach解绑。
*
7. 销毁所有创建的对象。
*
* @library libohinputmethod.so
* @kit IMEKit
* @syscap SystemCapability.MiscServices.InputMethodFramework
* @since 12
*/
/**
* @file inputmethod_inputmethod_proxy_capi.h
*
* @brief 输入法代理的头文件,提供应用主动向输入法服务发送请求和通知的方法,包括显示/隐藏键盘、通知选区变更、通知光标更新、通知配
* 置变更、发送私有命令等。InputMethodProxy实例由OH_InputMethodController_Attach返回,不可自行创建,在Detach之前保持有效。
*
* @include
* @library libohinputmethod.so
* @kit IMEKit
* @syscap SystemCapability.MiscServices.InputMethodFramework
* @since 12
* @version 1.0
*/
#ifndef OHOS_INPUTMETHOD_INPUTMETHOD_PROXY_CAPI_H
#define OHOS_INPUTMETHOD_INPUTMETHOD_PROXY_CAPI_H
#include
#include "inputmethod_types_capi.h"
#include "inputmethod_attach_options_capi.h"
#include "inputmethod_cursor_info_capi.h"
#include "inputmethod_private_command_capi.h"
#ifdef __cplusplus
extern "C"{
#endif /* __cplusplus */
/**
* @brief 应用与输入法服务之间的交互代理对象,应用可通过此对象调用输入法服务的相关接口,并接收输入法服务的事件回调。该结构体为不透
* 明类型(opaque type),调用者不可直接访问其内部成员,仅可通过本模块提供的函数接口进行操作。
*
*
用途
*
*
InputMethod_InputMethodProxy是应用端与输入法服务交互的核心代理对象,用于向输入法服务发送请求和通知。通过此代理对象,
* 应用可以控制键盘的显示与隐藏、通知编辑框的文本选区变化和配置变化、更新光标位置、以及发送私有命令数据。
*
*
生命周期管理
*
*
- 创建方式:由[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)函数创建并作为输出参数返回,调用者不可手动创建此对象。
*
- 销毁方式:不可手动销毁。当调用[OH_InputMethodController_Detach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_detach)解除绑定后,InputMethod_InputMethodProxy对象将由系统自动释放并失效。
*
- 有效性:InputMethod_InputMethodProxy仅在Attach与Detach之间有效。Detach后,所有通过此对象调用的函数将返回
* IME_ERR_DETACHED错误码,不可再使用。
*
- 重复创建/销毁:不支持重复销毁。每次Attach会产生一个新的InputMethod_InputMethodProxy实例,对应的Detach会使其失效。
*
*
使用注意事项
*
*
- 调用任何InputMethod_InputMethodProxy相关函数前,必须确保已通过[OH_InputMethodController_Attach]
* (capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_attach)成功获取该对象,且尚未调用Detach。
*
- inputMethodProxy指针不可为NULL,传入NULL指针将导致IME_ERR_NULL_POINTER错误码。示例:调用前未判空即调用函数时触
* 发,应在调用前判断指针是否为NULL,若为NULL则先通过Attach获取有效对象或终止调用。
*
- Detach后不可再使用已获取的inputMethodProxy指针,所有操作将返回IME_ERR_DETACHED。示例:在Detach后调用任何接口时返
* 回该码,应检查生命周期状态,仅在Attach与Detach之间使用该对象,否则重新Attach。此对象为不透明类型,不可直接访问内部成员或进行内
* 存操作(如malloc/free)。
*
- 非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象,如需多线程访问请自行加锁保护。
*
*
相关函数:
*
*
以下为可通过InputMethod_InputMethodProxy对象调用的操作函数:
* | 函数 | 描述 |
* | -- | -- |
* | [OH_InputMethodProxy_ShowKeyboard](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_showkeyboard) | 显示键盘。 |
* | [OH_InputMethodProxy_ShowTextInput](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_showtextinput) | 显示文本输入框。 |
* | [OH_InputMethodProxy_HideKeyboard](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_hidekeyboard) | 隐藏键盘。 |
* | [OH_InputMethodProxy_NotifySelectionChange](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_notifyselectionchange) | 通知文本框选区变化。 |
* | [OH_InputMethodProxy_NotifyConfigurationChange](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_notifyconfigurationchange) | 通知输入框配置变化。 |
* | [OH_InputMethodProxy_NotifyCursorUpdate](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_notifycursorupdate) | 通知光标位置变化。 |
* | [OH_InputMethodProxy_SendPrivateCommand](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_sendprivatecommand) | 发送私有数据命令。 |
*
*
关联关系:
*
- 与TextEditorProxy的关系:[InputMethod_TextEditorProxy](capi-inputmethod-inputmethod-texteditorproxy.md)负责
* 接收输入法应用的请求和通知,InputMethod_InputMethodProxy负责向输入法服务发送请求和通知。两者在Attach时同时建立关联,构成双向
* 通信通道。
*
- 与AttachOptions的关系:[InputMethod_AttachOptions](capi-inputmethod-inputmethod-attachoptions.md)在Attach时
* 传入,用于配置绑定选项(如是否显示键盘、请求键盘原因等),Attach成功后生成InputMethod_InputMethodProxy实例。
*
* @since 12
*/
typedef struct InputMethod_InputMethodProxy InputMethod_InputMethodProxy;
/**
* @brief 显示键盘。调用此函数后,系统将请求输入法应用弹出软键盘界面,用于文本输入。
*
*
使用场景:当应用需要主动拉起键盘以便用户进行文本输入时调用此函数,例如编辑框获得焦点后需要显示键盘的场景。
*
*
使用后效果:调用成功后,输入法应用将弹出软键盘界面;调用失败后,返回对应的错误码,需根据错误码进行处理。
*
*
前置条件:必须先调用[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)获取inputMethodProxy实例,且当前处于已绑定(Attached)状态。
*
*
生命周期管理:inputMethodProxy由[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)创建输出,不可手动销毁。当调用[OH_InputMethodController_Detach]
* (capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_detach)解除绑定后,inputMethodProxy将失效,此后再调用此
* 函数将返回IME_ERR_DETACHED错误码。
*
*
调用顺序:OH_InputMethodController_Attach → OH_InputMethodProxy_ShowKeyboard →
* OH_InputMethodProxy_HideKeyboard → OH_InputMethodController_Detach
*
*
线程安全:此函数非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象,如需多线程访问请自行加锁保护。
*
* @param inputMethodProxy 输入指针,表示指向{@link InputMethod_InputMethodProxy}实例的指针。inputMethodProxy由调用
* [OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_attach)获取。该指针不
* 可为NULL,若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。Detach后该指针失效,不可再用于调用任何InputMethodProxy相关函数。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,键盘已请求显示。
*
{@link IME_ERR_IMCLIENT} - 输入法客户端错误,可能是客户端内部异常。
*
{@link IME_ERR_IMMS} - 输入法服务错误,可能是输入法管理服务不可用。
*
{@link IME_ERR_DETACHED} - 未绑定输入法,表示已调用Detach,需重新Attach后再使用。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,传入的inputMethodProxy为NULL。
*
具体错误码可以参考{@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_InputMethodProxy_ShowKeyboard(InputMethod_InputMethodProxy *inputMethodProxy);
/**
* @brief 显示文本输入框。与ShowKeyboard不同,此接口可通过AttachOptions指定请求键盘输入的原因,系统根据原因决定是否弹出键盘。
*
*
使用场景:当应用需要在特定场景下(如主动切换输入框、恢复输入等)请求显示文本输入界面时调用此函数,特别适用于需要携带
* RequestKeyboardReason的场景。
*
*
使用后效果:调用成功后,系统将根据options中的RequestKeyboardReason决定是否弹出键盘并激活文本输入;调用失败后,返回对
* 应的错误码。
*
*
前置条件:必须先调用[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)获取inputMethodProxy实例,且当前处于已绑定(Attached)状态。options参数需先通过
* [OH_AttachOptions_Create](capi-inputmethod-attach-options-capi-h.md#oh_attachoptions_create)创建。
*
*
生命周期管理:inputMethodProxy由[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)创建输出,不可手动销毁。Detach后失效。options的生命周期由调用者管理,使用完毕后需调用
* [OH_AttachOptions_Destroy](capi-inputmethod-attach-options-capi-h.md#oh_attachoptions_destroy)销毁。
*
*
线程安全:此函数非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象。
*
* @param inputMethodProxy 输入指针,表示指向{@link InputMethod_InputMethodProxy}实例的指针。inputMethodProxy由调用
* [OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_attach)获取。该
* 指针不可为NULL,若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。Detach后该指针失效。
* @param options 输入指针,表示指向{@link InputMethod_AttachOptions}实例的指针,用于获取配置选项。该指针不可为NULL,
* 若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。此接口中只需关注{@link InputMethod_RequestKeyboardReason}属性,表示请
* 求键盘输入的原因。AttachOptions中的ShowKeyboard属性在此接口中始终为true,无需额外关注。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功。
*
{@link IME_ERR_IMCLIENT} - 输入法客户端错误。
*
{@link IME_ERR_IMMS} - 输入法服务错误。
*
{@link IME_ERR_DETACHED} - 未绑定输入法,已Detach需重新Attach。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,inputMethodProxy或options为NULL。
*
具体错误码可以参考{@link InputMethod_ErrorCode}。
* @since 15
*/
InputMethod_ErrorCode OH_InputMethodProxy_ShowTextInput(
InputMethod_InputMethodProxy *inputMethodProxy, InputMethod_AttachOptions *options);
/**
* @brief 隐藏键盘。调用此函数后,系统将请求输入法应用关闭软键盘界面。
*
*
使用场景:当应用需要主动收起键盘时调用此函数,例如编辑框失去焦点、用户完成输入后需要隐藏键盘的场景。
*
*
使用后效果:调用成功后,输入法应用将收起软键盘界面;调用失败后,返回对应的错误码。
*
*
前置条件:必须先调用[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)获取inputMethodProxy实例,且当前处于已绑定(Attached)状态。
*
*
生命周期管理:inputMethodProxy由[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)创建输出,不可手动销毁。Detach后失效,再调用此函数将返回IME_ERR_DETACHED。
*
*
线程安全:此函数非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象。
*
* @param inputMethodProxy 输入指针,表示指向{@link InputMethod_InputMethodProxy}实例的指针。inputMethodProxy由调用
* [OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_attach)获取。该
* 指针不可为NULL,若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。Detach后该指针失效。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,键盘已请求隐藏。
*
{@link IME_ERR_IMCLIENT} - 输入法客户端错误。
*
{@link IME_ERR_IMMS} - 输入法服务错误。
*
{@link IME_ERR_DETACHED} - 未绑定输入法,已Detach需重新Attach。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针。
*
具体错误码可以参考{@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_InputMethodProxy_HideKeyboard(InputMethod_InputMethodProxy *inputMethodProxy);
/**
* @brief 通知文本框选区变化。当输入框内文本内容、光标位置或选中文本发生变化时,通过此接口将变更信息通知给输入法应用,使输入法能够
* 感知编辑框的文本状态。
*
*
使用场景:当编辑框中的文本内容被修改、光标位置发生移动、或用户选中文本发生变化时调用此函数,确保输入法应用与编辑框的文
* 本状态保持同步。
*
*
使用后效果:调用成功后,输入法应用将接收到选区变更信息,并据此更新输入法内部状态(如候选词、联想等);调用失败后,返回
* 对应的错误码。
*
*
前置条件:必须先调用[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)获取inputMethodProxy实例,且当前处于已绑定(Attached)状态。
*
*
生命周期管理:inputMethodProxy由[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)创建输出,不可手动销毁。Detach后失效。
*
*
内存管理:text参数为输入指针,由调用者分配内存,函数内部仅读取该数据,不会修改或释放。调用者负责text数组内存的生命周期
* 管理。
*
*
线程安全:此函数非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象。
*
* @param inputMethodProxy 输入指针,表示指向{@link InputMethod_InputMethodProxy}实例的指针。inputMethodProxy由调用
* [OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_attach)获取。该
* 指针不可为NULL,若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。Detach后该指针失效。
* @param text 输入指针,整个输入文本,采用UTF-16编码。由调用者分配内存,函数仅读取该数据。该指针不可为NULL。长度最大限制为
* 8K(8192个char16_t字符,对应16384字节),超出此限制将返回IME_ERR_PARAMCHECK。
* @param length 输入参数,text参数的字符数量(单位:char16_t字符个数)。取值范围:大于0且不超过8192。超过8192将返回
* IME_ERR_PARAMCHECK错误码。
* @param start 输入参数,所选文本的起始位置(单位:字符偏移量,从0开始计数)。取值范围:大于等于0且小于等于end。取值原则:start
* 应小于等于end,且不超过text的实际长度。
* @param end 输入参数,所选文本的结束位置(单位:字符偏移量,从0开始计数)。取值范围:大于等于start且小于等于text的实际长度。取
* 值原则:当无选中文本时,start与end相等,表示光标位置。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功。
*
{@link IME_ERR_PARAMCHECK} - 参数错误,可能是length超过8K限制、start/end范围不合法等,请检查参数值是否在有效范围
* 内。
*
{@link IME_ERR_IMCLIENT} - 输入法客户端错误。
*
{@link IME_ERR_IMMS} - 输入法服务错误。
*
{@link IME_ERR_DETACHED} - 未绑定输入法,已Detach需重新Attach。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,inputMethodProxy为NULL。
*
具体错误码可以参考{@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_InputMethodProxy_NotifySelectionChange(
InputMethod_InputMethodProxy *inputMethodProxy, char16_t text[], size_t length, int start, int end);
/**
* @brief 通知输入框配置变化。当编辑框的回车键类型或输入类型发生变化时,通过此接口将新的配置信息通知给输入法应用,使输入法能够调整
* 键盘布局和输入行为。
*
*
使用场景:当编辑框的输入类型(如从文本模式切换为数字模式)或回车键类型(如从"完成"切换为"搜索")发生变化时调用此函数。
*
*
使用后效果:调用成功后,输入法应用将根据新的配置调整键盘布局和回车键显示;调用失败后,返回对应的错误码。
*
*
前置条件:必须先调用[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)获取inputMethodProxy实例,且当前处于已绑定(Attached)状态。
*
*
生命周期管理:inputMethodProxy由[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)创建输出,不可手动销毁。Detach后失效。
*
*
线程安全:此函数非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象。
*
* @param inputMethodProxy 输入指针,表示指向{@link InputMethod_InputMethodProxy}实例的指针。inputMethodProxy由调用
* [OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_attach)获取。该
* 指针不可为NULL,若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。Detach后该指针失效。
* @param enterKey 输入参数,回车键类型。取值范围:{@link InputMethod_EnterKeyType}枚举值,如IME_ENTER_KEY_UNSPECIFIED、
* IME_ENTER_KEY_GO、IME_ENTER_KEY_SEARCH等。使用后效果:输入法将据此调整回车键的显示标签和功能。
* @param textType 输入参数,输入框类型。取值范围:{@link InputMethod_TextInputType}枚举值,如
* IME_TEXT_INPUT_TYPE_UNSPECIFIED、
* IME_TEXT_INPUT_TYPE_TEXT、IME_TEXT_INPUT_TYPE_NUMBER等。使用后效果:输入法将据此切换键盘布局(如数字键盘、文本键盘
* 等)。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功。
*
{@link IME_ERR_PARAMCHECK} - 参数错误,可能是enterKey或textType值不合法,请检查枚举值是否在有效范围内。
*
{@link IME_ERR_IMCLIENT} - 输入法客户端错误。
*
{@link IME_ERR_IMMS} - 输入法服务错误。
*
{@link IME_ERR_DETACHED} - 未绑定输入法,已Detach需重新Attach。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针。
*
具体错误码可以参考{@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_InputMethodProxy_NotifyConfigurationChange(InputMethod_InputMethodProxy *inputMethodProxy,
InputMethod_EnterKeyType enterKey, InputMethod_TextInputType textType);
/**
* @brief 通知光标位置变化。当编辑框中光标位置发生变化时,通过此接口将新的光标信息通知给输入法应用,使输入法能够根据光标位置调整候
* 选词窗口的显示位置。
*
*
使用场景:当编辑框中光标位置发生移动时调用此函数,例如用户点击编辑框中不同位置、代码主动移动光标等场景。
*
*
使用后效果:调用成功后,输入法应用将接收到新的光标信息,并据此调整候选词窗口的定位;调用失败后,返回对应的错误码。
*
*
前置条件:必须先调用[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)获取inputMethodProxy实例。cursorInfo需先通过[OH_CursorInfo_Create]
* (capi-inputmethod-cursor-info-capi-h.md#oh_cursorinfo_create)创建并设置相关属性。
*
*
生命周期管理:inputMethodProxy由Attach创建输出,不可手动销毁,Detach后失效。cursorInfo的生命周期由调用者管理,使用完
* 毕后需调用[OH_CursorInfo_Destroy](capi-inputmethod-cursor-info-capi-h.md#oh_cursorinfo_destroy)销毁。
*
*
线程安全:此函数非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象。
*
* @param inputMethodProxy 输入指针,表示指向{@link InputMethod_InputMethodProxy}实例的指针。inputMethodProxy由调用
* {@link OH_InputMethodController_Attach}获取。该指针不可为NULL,若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。
* Detach后该指针失效。
* @param cursorInfo 输入指针,指向{@link InputMethod_CursorInfo}实例的指针,表示光标信息。该指针不可为NULL,若传入NULL指针将
* 返回IME_ERR_NULL_POINTER错误码。
* cursorInfo由调用者通过[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)创建,函数仅读取其内部数据,不会修改或释放。使用完毕后调用者需调用
* {@link OH_CursorInfo_Destroy}释放cursorInfo。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功。
*
{@link IME_ERR_PARAMCHECK} - 参数错误,可能是cursorInfo内部数据不合法,请检查光标信息参数。
*
{@link IME_ERR_IMCLIENT} - 输入法客户端错误。
*
{@link IME_ERR_IMMS} - 输入法服务错误。
*
{@link IME_ERR_DETACHED} - 未绑定输入法,已Detach需重新Attach。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,inputMethodProxy或cursorInfo为NULL。
*
具体错误码可以参考{@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_InputMethodProxy_NotifyCursorUpdate(
InputMethod_InputMethodProxy *inputMethodProxy, InputMethod_CursorInfo *cursorInfo);
/**
* @brief 发送私有数据命令。应用通过此接口向输入法应用发送自定义的私有命令数据,用于实现应用与输入法之间的私有通信协议。
*
*
使用场景:当应用需要向输入法应用传递自定义的私有数据(如业务特定的指令、配置参数等)时调用此函数,适用于应用与输入法之
* 间有私有通信协议的场景。
*
*
使用后效果:调用成功后,输入法应用将通过[OH_TextEditorProxy_ReceivePrivateCommandFunc]
* (capi-inputmethod-text-editor-proxy-capi-h.md#oh_texteditorproxy_receiveprivatecommandfunc)回调接收到私有命令数据;调用
* 失败后,返回对应的错误码。
*
*
前置条件:必须先调用[OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.
* md#oh_inputmethodcontroller_attach)获取inputMethodProxy实例,且当前处于已绑定(Attached)状态。
*
*
生命周期管理:inputMethodProxy由Attach创建输出,不可手动销毁,Detach后失效。privateCommand数组中每个元素的生命周期
* 由调用者管理,使用完毕后需调用[OH_PrivateCommand_Destroy](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_destroy)逐个销毁。
*
*
性能建议:privateCommand数组最多包含5个命令对象(size最大为5),超出此限制将返回IME_ERR_PARAMCHECK。单个命令对象最大
* 大小为32KB,超出限制可能导致数据传输失败。
*
*
线程安全:此函数非线程安全,不建议在多线程环境下同时操作同一个inputMethodProxy对象。
*
* @param inputMethodProxy 输入指针,表示指向{@link InputMethod_InputMethodProxy}实例的指针。inputMethodProxy由调用
* [OH_InputMethodController_Attach](capi-inputmethod-controller-capi-h.md#oh_inputmethodcontroller_attach)获取。该
* 指针不可为NULL,若传入NULL指针将返回IME_ERR_NULL_POINTER错误码。Detach后该指针失效。
* @param privateCommand 输入指针,私有命令数组,每个元素为指向InputMethod_PrivateCommand实例的指针。由调用者创建并分配内存,
* 函数仅读取数据。该指针不可为NULL。单个命令对象最大大小为32KB(包含key和value的总大小),超出可能导致传输失败。数组最大长度为5
* (即size参数最大为5)。
* @param size 输入参数,私有命令数组的元素个数。取值范围:大于0且不超过5。超过5将返回IME_ERR_PARAMCHECK错误码。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,私有命令已发送。
*
{@link IME_ERR_PARAMCHECK} - 参数错误,可能是size超过5、privateCommand为NULL、或单个命令超过32KB,请检查参数值。
*
{@link IME_ERR_IMCLIENT} - 输入法客户端错误。
*
{@link IME_ERR_IMMS} - 输入法服务错误。
*
{@link IME_ERR_DETACHED} - 未绑定输入法,已Detach需重新Attach。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,inputMethodProxy或privateCommand为NULL。
*
具体错误码可以参考{@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_InputMethodProxy_SendPrivateCommand(
InputMethod_InputMethodProxy *inputMethodProxy, InputMethod_PrivateCommand *privateCommand[], size_t size);
#ifdef __cplusplus
}
#endif /* __cplusplus */
/** @} */
#endif // INPUTMETHOD_INPUTMETHOD_PROXY_CAP_H