`
waterlife
  • 浏览: 66990 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Android Framework系列之IMF(二)

阅读更多

原创文章,转载请标注出处----

 

InputConnection是IMF里面一个重要的接口,他是实现BaseInputConnection和InputConnectionWrapper 上层的接口。主要用于应用程序和InputMethod 之间通信的通道,包括实现读取关标周围的输入,向文本框中输入文本以及给应用程序发送各种按键事件。

        InputConnection ic = getCurrentInputConnection();   //获取InputConnection接口
        
        if (ic != null){
            ic.beginBatchEdit();    //开始输入编辑操作    	            
            if (isShifted()) {
            	text = text.toString().toUpperCase();
            }               	
            ic.commitText(text, 1); //将text字符输入文本框,并且将关标移至字符做插入态
            ic.endBatchEdit();  //完成编辑输入
        }        

 接口InputMethod是上节说到的AbstractInputMethodService和InputMethodService的上层接口,它可以产生各种按键事件和各种字符文本。

 

所有的IME客户端都要绑定BIND_INPUT_METHOD ,这是IMF出于对安全的角度的考量,对使用InputMethodService的一个所有客户端的强制要求。否则系统会拒绝此客户端使用InputMethod。

        <service android:name="IME"
                android:label="@string/SoftkeyIME"
                android:permission="android.permission.BIND_INPUT_METHOD">

 

在这个接口中有

bindInput (InputBinding binding) 绑定一个一个应用至输入法;

createSession (InputMethod.SessionCallback callback) 创建一个新的InputMethodSession 用于客户端与输入法的交互;

startInput (InputConnection inputConnection, EditorInfo info) 输入法准备就绪开始接受各种事件并且将输入的文本返回给应用程序;

unbindInput () 取消应用程序和输入法的绑定;

showSoftInput (int flags, ResultReceiver resultReceiver) 和hideSoftInput (int flags, ResultReceiver resultReceiver) 顾名思义是显示和隐藏软键盘输入。

 

InputMethodSession是一个可以安全暴露给应用程序使用的接口,他需要由InputMethodService InputMethodSessionImpl 实现。

以下是一段在Framework中取到的代码,可以比较全面的反应这个接口的使用:

 final InputMethodSession mInputMethodSession;
public void executeMessage(Message msg) {
        switch (msg.what) {
            case DO_FINISH_INPUT:
                mInputMethodSession.finishInput();  //应用程序停止接收字符
                return;
            case DO_DISPLAY_COMPLETIONS:
                mInputMethodSession.displayCompletions((CompletionInfo[])msg.obj);  //输入法自动完成功能
                return;
            case DO_UPDATE_EXTRACTED_TEXT:
                mInputMethodSession.updateExtractedText(msg.arg1,
                        (ExtractedText)msg.obj);
                return;
            case DO_DISPATCH_KEY_EVENT: {
                HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
                mInputMethodSession.dispatchKeyEvent(msg.arg1,
                        (KeyEvent)args.arg1,
                        new InputMethodEventCallbackWrapper(
                                (IInputMethodCallback)args.arg2));  //处理按键
                mCaller.recycleArgs(args);
                return;
            }
            case DO_DISPATCH_TRACKBALL_EVENT: {
                HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
                mInputMethodSession.dispatchTrackballEvent(msg.arg1,
                        (MotionEvent)args.arg1,
                        new InputMethodEventCallbackWrapper(
                                (IInputMethodCallback)args.arg2)); 
                mCaller.recycleArgs(args);
                return;
            }
            case DO_UPDATE_SELECTION: {
                HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
                mInputMethodSession.updateSelection(args.argi1, args.argi2,
                        args.argi3, args.argi4, args.argi5, args.argi6); //更新选取的字符
                mCaller.recycleArgs(args);
                return;
            }
            case DO_UPDATE_CURSOR: {
                mInputMethodSession.updateCursor((Rect)msg.obj); //更新关标
                return;
            }
            case DO_APP_PRIVATE_COMMAND: {
                HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
                mInputMethodSession.appPrivateCommand((String)args.arg1,
                        (Bundle)args.arg2); //处理应用程序发给输入法的命令
                mCaller.recycleArgs(args);
                return;
            }
            case DO_TOGGLE_SOFT_INPUT: {
                mInputMethodSession.toggleSoftInput(msg.arg1, msg.arg2); //切换软键盘
                return;
            }
        }
        Log.w(TAG, "Unhandled message code: " + msg.what);
    }

 

分享到:
评论

相关推荐

    Android IMF输入法总结

    IMF Input Method Framework 的主要组件包括 Input Method Manager (IMM)、Input Method (IME) 和 Client Applications。 1. Input Method Manager (IMM):相当于客户端的 API,协调其它部分的互动,负责跟系统...

    Android开发实例详解之IMF(Android_SDK_Sample—SoftKeyboard).pdf

    ### Android开发实例详解之IMF (Android_SDK_Sample—SoftKeyboard) #### 一、IMF简介 在深入了解SoftKeyboard项目之前,我们先简要介绍一下IMF(Input Method Framework)。随着Android SDK 1.5版本的发布,...

    Android-development-sample---IMF.rar_Android softKeyboard_androi

    【标题】"Android-development-sample---IMF.rar"与"Android softKeyboard_androi"结合,意味着这是一个关于Android开发的示例项目,特别关注于实现输入法框架(Input Method Framework,简称IMF),并且涉及到软...

    谷歌输入法框架 IMF

    输入法框架(Input Method Framework,IMF)是Android系统中用于管理用户输入方式的核心组件,主要涉及输入法管理器、输入法(IME)以及客户端应用。这个框架允许开发者创建自定义的输入法,并与系统中的各种应用...

    Android平台输入法开发解析

    Android 平台输入法开发解析是 Android 平台的一个重要组件,自 Android 1.5 版本以来,Android 平台开放了输入法框架(Input Method Framework,IMF),使得 Android 平台的输入法开发变得更加灵活和可扩展。...

    OpenWnn Android输入法源代码JAVA

    日文,中文,英文。 OpenWnn for Android is a IME(Input Method Editor) package which works on Android's IMF(Input Method Framework). This version contains Japanese, Chinese and English IME.

    android输入法原理分析

    Android 输入法的实现原理主要基于Input Method Framework (IMF)框架,该框架将输入法的实现分为三个核心模块:客户端控件、输入法服务(IMMS)和输入法应用(IME)。理解这些模块及其交互对于在Android系统下开发...

    android输入法

    #### 二、IMF(Input Method Framework)结构 IMF是Android系统提供的用于管理输入法框架的核心组件。其主要功能包括: - **管理多个输入法**:用户可以根据需求选择不同的输入法。 - **切换输入法**:允许用户在...

    OpenWnnAndroid输入法源代码Android开发网

    可能对研究输入法的朋友有些帮助: OpenWnn for Android is a IME(Input Method Editor) package ... works on Android's IMF(Input Method Framework). This version contains Japanese, Chinese and English IME.

    android_8 ppt (吉林大学android课程英文讲义)

    在Android开发中,输入法框架(Input Method Framework,IMF)是极其重要的一部分,特别是随着Android的成熟和发展,越来越多的硬件/软件设备和输入技术的出现,如实体键盘、虚拟键盘、语音识别、手写输入等。...

    Android代码-类似搜狗输入法源码.zip

    Android系统提供了一个输入法框架(Input Method Framework,IMF),允许开发者创建自定义的输入法。这个框架包括输入法服务(InputMethodService)和输入法编辑器(InputMethodEditor)两部分,用于处理用户输入...

    eclipse android4.4.2源码

    6. **Input Method Framework (IMF)**:改进了输入法框架,支持更丰富的键盘布局和交互方式,为第三方输入法提供了更好的平台。 7. **多用户支持**:API Level 19首次引入了多用户支持,允许多个用户在同一设备上...

    Android中文输入法实现-杨武

    IMF即输入方法框架(Input Method Framework),它是Android系统中用于管理输入法的核心组件。了解其结构对于开发自定义输入法至关重要。IMF的架构涉及多个层次,包括但不限于`android.view.ViewRoot`和`...

    Android开发实例详解之IMFAndroidSDKSampleSoftKeyboard.pdf

    在Android开发中,输入法(Input Method Framework, IMF)是一个重要的组成部分,特别是在涉及到用户与设备交互,特别是文本输入时。本文将深入讲解Android开发实例,具体聚焦于IMFAndroidSDKSampleSoftKeyboard项目...

    安卓平台输入法开发解析

    自Android 1.5版本以来,谷歌引入了输入法框架(Input Method Framework,简称IMF),这是Android平台的一项特色设计,旨在支持没有物理键盘的设备进行文字输入。IMF的开放不仅推动了触屏设备的普及,还提供了高度的...

    基于Android平台的“字元码”输入法研究与实现.pdf

    Android是一种基于Linux的开源操作系统,其输入方法框架(Android Input Method Framework,IMF)由输入法管理器、输入法(IME)和客户端应用三部分构成,用于管理交互和文本生成。Android SDK是Android平台的软件...

    安卓Andriod源码——注释过的谷歌输入法PinyinIME源码.zip

    4. **输入法框架(Input Method Framework, IMF)**: Android的输入法框架负责管理所有输入法服务。PinyinIME源码会展示如何与IMF通信,例如如何响应系统的输入请求,以及如何通过InputConnection接口发送用户输入...

    马托斯的教程总结

    至于Input Method Framework (IMF),它处理软硬件键盘的交互,确保输入法的正确工作。 这些知识点构成了Android应用开发的基础,对理解和实践Android编程至关重要。通过深入学习和实践,开发者能够构建功能丰富的、...

    输入法介绍

    自从Android平台1.5版本之后,谷歌推出了Android平台的输入法框架(Input Method Framework, IMF),这是一项重要的技术革新,极大地推动了无物理键盘设备的发展,并且增强了软件的灵活性和可扩展性。 ##### 输入法...

Global site tag (gtag.js) - Google Analytics