zoukankan      html  css  js  c++  java
  • OPhone平台IMF简介

    原文地址:http://dev.10086.cn/cmdn/wiki/index.php?edition-view-4528-1.html


    Android平台自1.5版本之后开放了输入法框架(Input Method Framework,IMF),IMF是Android平台的特色设计。它的出现,为诞生不带实体键盘的设备提供了可能。同时,IMF开放了 Android平台输入法的开发接口,为Android平台的输入法提供了可扩展性。OPhone平台继承了Android平台的输入法框架。本文首先介绍OPhone平台IMF的构成、工作机制和流程,以便广大开发者能够更好的理解OPhone平台是如何实现文字输入。

    1、OPhone平台IMF简介

    OPhone平台的IMF按照功能分为三个主要模块,分别为:客户端控件,输入法服务(IMMS),以及输入法应用(IME)。如果要深刻的理解和掌握OPhone平台的输入法开发技巧,那么必须要了解OPhone平台IMF内部各个模块之间的工作机制。

    • 客户端控件,是指具有文字编辑功能的系统控件(如EditText),是平台内部输入法应用人机交互的起点;
    • 输入法服务,是OPhone平台的底层基础服务之一,负责管理输入法,包括输入法的安装、注册、激活等;
    • 输入法应用,则是指平台内预置,或者后续安装的输入法程序。

    下面我们将分别介绍以上三个模块,并简要介绍各模块内主要使用的对象和服务。

    1.1 客户端控件

    • OPhone平台的客户端控件主要是TextView及其子类,例如EditText。
    • 客户端控件是输入法人机交互的起点。
    • 客户端控件与输入法服务和输入法应用都有交互操作。

    以EditText为例

    • 当客户端控件获得焦点时,控件启动输入法应用并显示键盘;
    • 失去焦点时,则隐藏键盘。
    • 收到长按事件时,弹出输入法选择菜单。
    • 这类操作属于客户端控件与输入法服务间的交互。

    此外,客户端控件还可以

    • 向输入法应用传递文本状态,包括光标位置、文本选择等;
    • 接受并显示输入法应用反馈的输入文字。
    • 这类交互属于客户端控件与输入法应用的交互。

    客户端控件对输入法服务和输入法应用的操作

    • 都是通过对InputMethodManager实例的调用来实现的。
    • InputMethodManager更像是一个供客户端控件使用API操作的集合,定义对输入法应用以及输入法服务的一系列操作。
    • 客户端控件会通过InputMethodManager.peekInstance() 来获取唯一的实例。

    需要指出的是,各调用函数的具体操作并不是在InputMethodManager中具体实现的。

    • OPhone平台的输入法框架定义了 IIputMethodManager接口和IIputMethodSession接口,分别定义了对输入法服务和输入法应用的操作。
    • InputMethodManagerService和InputMethodService则分别对这两个接口进行了具体的实现。
    • 这样通过AIDL机制,客户端控件便可以跨进程的调用其他service内的实现。

    通过这样的机制,

    • OPhone平台降低了输入法框架内各个模块间的耦合性,并且保证了输入法应用的可扩展性。
    • 客户端无需知道使用的是那一款输入法,从而实现了简单直接的控制。

    另外还需要指出的,

    • 客户端控件通过IIputMethodSession对于输入法应用的交互是单向的,即只能向输入法应用传递信息,无法获取信息。
    • 客户端应用从输入法应用获取信息是通过InputConnection来实现的;
    • 在启动输入法时,InputConnection由客户端控件创建,并传递给输入法应用,由输入法应用调用,进行信息反馈。

    1.2 输入法服务

    • 作为平台底层的一项基础服务,用来管理输入法应用;
    • 主要工作由InputMethdoManagerService(IMMS)完成。

    输入法服务如何实现输入法的安装、切换

    • 输入法安装。IMMS内部包含一个receiver,注册接收所有程序包安装、卸载的消息。当收到此类消息后,IMMS会通过系统的PackageManager查询所有声明为InputMethod的程序,并生成一个系统可用的输入法列表,供用户选择使用。
    • 输入法切换。当用户选择了一款输入法后,IMMS将此输入法的ID保存为系统的默认输入法ID。这里的ID是该输入法在IMMS内维护的可用输入法列表中的位置ID。当客户端通过InputMethodManager启动输入法应用时,IMMS将根据这个ID从输入法列表中取出输入法,并加载使用。

    1.3 输入法应用

    • 是具体处理用户输入行为的应用程序。
    • 为了能够在OPhone的输入法框架中良好的运行,所有的输入法应用都需要继承特定的service。
    • OPhone平台的输入法框架为输入法应用定义了一个基类InputMethodService。
    • InputMethodService提供了一个输入法的标准实现。定义了输入法生命周期内的重要函数,提供给开发人员进行相应的处理。

    为了帮助开发者了解输入法应用的工作流程。我们首先看一下输入法应用的生命周期:

    • 当用户触发输入法显示的时候(客户端控件获得焦点),InputMethodService启动。
    • 首先调用onCreate() 函数,该函数在输入法第一次启动的时候调用,适合用来做一些初始化的设置,与其他service相同;
    • 调用onCreateInputView() 函数,在该函数中创建KeyboardView并返回;
    • 调用onCreateCandidatesView()函数,在该函数中创建候选区实现并返回;
    • 调用onStartInputView()函数来开始输入内容,
    • 输入结束后调用onFinishInput()函数来结束当前的输入,
    • 如果移动到下一个输入框则重复调用onStartInputView和onFinishInput函数;
    • 在输入法关闭的时候调用onDestroy() 函数。

    InputMethodService实现了两个重要的接口,InputMethod和InputMethodSession。

    • InputMethod 接口定义了一套操纵输入法应用的方法。如bindInput, hideInput, startInput等。为了系统安全,这类接口只有系统可以访问,客户端控件无法直接调用这个接口。所有的输入法应用都需要客户端控件具有BIND_INPUT_METHOD权限,作为系统的安全机制,否则将无法与输入法服务交互。
    • InputMethodSession作为InputMethod的辅助接口类,为客户端控件开放了可直接调用的函数接口。包括向输入法应用分发键盘事件,更新光标位置,更新编辑区域内选择的问题信息等。
  • 相关阅读:
    VMware安装CentOS系统与配置全过程
    Matplotlib学习笔记
    python正则表达式字符记录
    HyperLedger Fabric 学习思路分享
    fabric-sdk-container v1.0-beta 新增支持多服务节点
    HyperLedger/Fabric SDK使用Docker容器镜像快速部署上线
    HyperLedger/Fabric JAVA-SDK with 1.1
    HyperLedger Fabric 1.1 手动部署单机单节点
    Hyperledger Fabric CA User’s Guide——配置设置(四)
    Hyperledger Fabric CA User’s Guide——开始(三)
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/2786004.html
Copyright © 2011-2022 走看看