行业动态
Android平台和iOS平台的输入法开发框架有何异同
2021-02-27

ios 输入法 开发

对于使用手机的任何人,都不可能缺少一种工具。它既不是诸如微信之类的社交工具,也不是诸如支付宝之类的金融工具(实际上,这两者是脱节的),它也不是诸如输入法之类的输入工具。更重要的是,输入法也是特权工具,因为它可以与任何其他可以接受信息输入的应用程序配合使用,以帮助用户完成信息输入,这意味着输入法有更多机会接触用户的个人和私人信息。那么,作为手机用户,您知道手机输入法背后的操作机制吗?您是否曾经怀疑输入法会在您不知情的情况下窃取您的个人信息?如果您对输入法开发感兴趣,您是否想知道Android平台和IOS平台的输入法开发框架之间的异同?作为输入法开发人员,我将结合我在两个平台上的输入法开发经验,告诉您我所看到的和我所实践的。

输入法开发简介

两个平台的输入法框架有一定的相似性,基本上都是通过继承指定的类来实现输入法的开发。在Android平台上,它是InputMethodService,IOS是UIInputViewController。

在Android平台上,除了继承InputMethodService类之外,还必须将以下说明添加到AndroidManifest.xml文件中

 
            
                
            
            
        

Android:resource =“ @ xml / method”表示xml文件夹中有一个method.xml文件,里面的内容应该是这样的:



其中,SettingsActivity是与输入法相对应的设置程序,以下称为主程序。

相比之下,IOS更容易上手。这是我之前写的一篇文章,介绍IOS输入法开发。尽管我使用Xamarin,但过程类似:如何使用Xamarin开发IOS输入法

如何与输入框进行交互

在Android平台下,我们将文本发送到输入框,如下所示:

InputConnection ic = getCurrentInputConnection();
        if (null != ic)
            ic.commitText("hello world", 1);

在IOS下,它是TextDocumentProxy.InsertText(“ hello world”)。

如果要将删除命令发送到输入框,Android的方法是模仿按Delete键的操作:

//调用该方法模仿删除键按下:simulateKeyEventDownUp(KeyEvent.KEYCODE_DEL);
private void simulateKeyEventDownUp(int keyCode) {
        InputConnection ic = getCurrentInputConnection();
        if (null == ic)
            return;
        ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
        ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
    }

在IOS下,它是TextDocumentProxy.DeleteBackward();

从这个角度来看,IOS的API设计更加简洁,但实际上,Android平台提供的接口比IOS的接口丰富得多,并且它可以完成许多无法完成的事情在IOS下,例如选择输入框的文本和更丰富的生命周期。

a7aea492ae090b22e4873202b7253ca9

Android输入法服务的生命周期UI的异同


393701618