【Android源码 栏目提醒】:本文主要为网学会员提供“Android系统插件式输入法程序的设计 - 企业软件开发”,希望对需要Android系统插件式输入法程序的设计 - 企业软件开发网友有所帮助,学习一下!
ISSN 1009—3044 E-marl:xsjl@cccc.net.enComputer Knowledge and Technok碱y电奠知识与技术 http://www.dnzs.net.enV01.5,No.35,December 2009,PP.9979-9981 Tel:+86.-55 1..5690963 5690964Android系统插件式输入法程序的设计 牵平新 (同济大学软件学院,上海200433)摘要:介绍了Android系统的基本概念,并分析了Android特性和迅速流行的原因。
讲解了Android系统提供的输入法框架。
实现一个输入法所需要做的工作,和现有输入法设计的局限性。
然后介绍插件式程序设计的实现方法。
并对手机等数码产品中插件式安装程序的优点进行分析,并采用该方法设计了包舍主程序。
和两个播件方式安装的输入法程序。
关键词:
android系统;输入法;插件式程序:手机应用 中图分类号:TP399 文献标识码:A 文章编号:lO眇一3叫4(2009)35—9979埘Android Hug-in Input Method Programs DesignLI Ping-xin(School of Software Engineering Tortgji University,Shanghai 200433,ctum)Abstract:Introduced the basic coneeDt of Android system,and analyzes the characteristics of Android and the reasons for Android beengrowing in popularity.Explained the Android system input method血dnlework,how tO implements an input method,and the limitatiom ofthe current method designing.Then introduced the plug—in program implementations.As well input as mobile phones and other digitalproduc协,the advantages and disadvantages of plug—in program analysis.And using the method designed a hlput method apphcafion includ-ing main program Pinyin input method and Handwriting input method.Key words:
android;inputmethod;plus;mobile appficafionl背景1.1 Android系统介绍 Android是Google开发的基于Linux平台的开源手机操作系统。
它包括操作系统、用户界面和应用程序——移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专利障碍。
Android SDK的提供了一些使用JAVA语言开发Android平台应用所必须的工具和API,同时还提供了使用C,C++语言开发的NDK工具【n。
Android包含了一整套核心库。
它为java语言提供了很多有用的功能。
在Android系统中所有的应用都运行在它自己的进程里,该进程是一个Dalvik虚拟机的实例。
Dalvik被设计成能在一台设备上高效的运行多个虚拟机实例。
Dalvik虚拟机的可执行文件被封装成Dalvik可执行格式(.dex)。
这是被优化过的最小内存依赖的格式。
java编译器(d】【工具)将注册了的和运行时用到的类编译成.dex格式。
Dalvik虚拟机依赖于底层linux内核提供的功能,如线程机制。
和内存管理机制。
Android程序通过apk文件进程安装。
apk格式是一种压缩格式,apk文件内包含程序执行的dex代码和程序使用的图片,音频,界面布局文件,C,c++静态库等资源文件。
1.2 Android系统特性 Android系统是开放源代码项目,整个系统的代码都是免费开放的。
Android系统的开发语言是Java(因为该语言没有通过Sun的认证,严格来说不能算作是Java语言,而是类Java语法的语言),java作为最流行的面向对象的语言,不仅容易学习,丰富的印i更加容易开发高级应用程序。
并且传统的手机应用程序,主要是采用J2ME平台,J2ME是采用Java作为开发语言.开发语言上的亲缘关系,使现有的J2ME手机应用程序很容易的移植到Android中。
同时Android系统是基于Linux系统的。
Linux系统中包含了大量的开源应用库,使用Android系统的NDK,更可以方便的使用现有Linux库开发出丰富的应用程序闭。
基于以上特性,Android系统已经推出。
经历了一年时间后,被各大手厂商接受,并迅速流行。
2输入法框架介绍 输入法是介于用户。
应用程序文本编辑框之间的联系通道。
输入法模块一般提供一个输入面板如软键盘。
触摸板。
将用户的输入根据某种输入算法(如笔画输入,拼音输入,手写输人等算法)转换成词组传递给文字输入框组件。
Android系统在1.5版本后开始提供输入法框架。
该框架提供了InputMethodManager服务组件来管理系统中安装的各种的输入法,InputMethodSerovice是代表某个具体输入法的进程,他负责某个输入法的初始化、创建、运行和销毁。
InputCormeetion是负责应用程序文字输入框和输入法交换数据。
输入法框架如图1所示。
图1 Android系统输入法框架收稿日期:2009-09-19作者简介:李平新(1984一),男。
山东泰安人,在读硕士,主要研究方向为嵌入式系统。
本拦目责任编辑:谢媛媛 ---·--·--软件设计开发·-9979 万方数据Computer Knowledge and Technology电囊知识与技术 第5卷第35期(2009年12月) 目前Android系统的输入法框架比较完善,实现一个输入法,只需要继承InputMehodService,并实现该类中定义的方法,和输入法输入逻辑和具体算法引擎,和软键盘布局,候选字显示等。
3插件式输入法的必要性和插件式程序的实现原理 目前比较流行的手机输入方式有全键盘拼音/英文输入,九键盘拼音/笔画,英文/数字输入,手写输入等【3】。
虽然某一种输入可以应对大多数情况的输入,但是多种输入法搭配会提供输入效率。
虽然可以安装多个不同类型输入程序,来提供多种输入方式,但是在Android系统中,多种输入法间切换时,需要先长击输入框,然后在弹出的选择框总选择需要的输入法,这个过程虽然只有2步操作,但是整个过程将会耗费若十秒时间.并且有砦情况下,新选择的输入法不会立刻运行,而是要等待一段比较长的时间后才会启动起来。
这种方式将会严重降低用户的输入效率。
比较普遍的做法是将多种输入法全部放到一个安装文件中。
比如一个apk文件同时提供拼音输入、九键笔画输入,和手写输入.那么这个apk文件将会占用大量的手机内存空间,但与此同时用户可能只习惯使用其中的少数几种输入法.这样输入法程序就浪费了一部分内存空间,因为输入程序的词库,算法引擎占用空间比较多,同时手机内存又是比较少的。
为此如果能够提供一种插件式输入法安装方式。
即用户可以选择安装或卸载某个输入法,但是多个输入法,却是运行在一个程序中进行。
并且输入法的切换过程只需点击一下既可快速切换141。
插件式输入法将包括2部分:输入切换器,和各种输人法插件。
输入法切换器用于管理安装的各种输入法插件,和在他们之间进行快速的切换。
各个输入法插件则提供不同的输入方式。
用户安装输入法,必须要安装输入法切换器,然后根据需要来安装不同的输入法插件。
Android提供了PackageManager类,可以查询所有安装在系统中apk程序信息。
PathClassLoader类,用于从其他apk文件中加载类。
这是插件输入法设计的关键。
PackageManager的ⅡueryIntentActivities(intent,fhg)方法可以查询系统中所有的提供满足参数intent(intent为“意图”的意思,比如
android中有一种“SEND”意图,表示用来共享数据,如Emaii程序,短信程序等都属于这种intent,在程序的AndroidManifest.xml文件中,可以设置程序的意图。
)的所有Activity信息,包括Activity的类名称,apk代码路径等阁。
知道了插件apk路径,就可以通过语句“new PathClassLoader(changed.sourceDir,classLoader)”来构造一个加载插件输人法代码的ClassLoader。
通过ClassLoader的loadClass(className)方法来加载插件类。
然后调用他的构造函数,即可创建该类的内存实例的对象。
Class c=classLoader.10adClass(changed.className); c.getConstructor(args_type…).newlnstance(args…); 然后就可以调用插件程序中的代码了。
4输入法插件的设计4.1输入法管理器设计 插件式输入法,需要一个主程序Switcher,用于查询、管理、加载输入法插件和输入法其他的一些功能,这些功能主 图2输入法插件结构要包括输入候选字的显示视图,输入法切换视图等。
插件式输入法系统的结构图如图2。
在输入法服务进程启动时,通过queryIntentActivitie80函数查询系统中的输入法插件,为了便于查询,需要定义一个专用的输入法插件标intent识符,如“corn.
android.1px.INPUMETHOD—PLUS”的intent,作为参数: queryIntentActivities(new intent(“tom.
android.1px.INPUMETHOD_PLUS”,nag)。
这样每一个输入法插件都要设置自己的intent属性为“corn.
android.1px.INPUMETHOD PLIdS”,这样才能够被插件管理器Switcher搜索到。
在查询到哪一个Activity包含输入法插件后,还要知道插件中的具体哪一个类是输入法实现类;因为我们的输入法要继承下面 要提到的AbstractlnputMethod抽象类,同时java是单继承的,所以我们还需要提供一个如代码l所示的接El,,用来获取插件中输 入法具体实现类的信息悯。
包含com.
android.1px.INPUMETHOD_PLUS的activity要继承这个接12I并实现其中的方法。
通过读取这个接口,输入法管理器,可 以获取到插件apk程序中实现输入法功能的类的名字,输入法的名字,和输入法图标的资源ID号等信息。
代码l插件信息接口 public interface Pluglnfo{ public String getName0; public String getClassName0; public Drawable getlcon0; } 4.2输入法插件设计 为了便于管理和加载输入法插件,需要提供一个统一的输入法接口。
输入法的基本数据流就是从屏幕,键盘获取用户原始输入,甚 至还包括用户上一次输入的字符(用于联想功能);输入数据经过输入法算法处理后产生输入字符和候选字符以及联想字符;将输入字 符传送给文本输入框,以及候选字符或者联系字符交给输入法管理器来显示。
代码2中显示了本输入法插件设计中采用的接口I)l。
9980·-欢件l壁计开发-·---··-· 本栏目责任编辑:谢嫒嫒 万方数据第5卷第35期(2009年12月1 Computer Kno训edge and Technology电脑知识与技术 代码2输入法插件接口 public interface lnputMethod f public boolean handlcKey(int primaryCode.into keyCodes);//用户输入的原始按键值 public void handleSpeeiM(Object data)’.//用户的书写输入数据甚至可以包括语音输入数据 public void associate(String inputed);//_12--次输入的数据.用于联想 public void startO;//肩动该插件 public void close0;//关闭该插件 public void clear0;//清理变量.初始化插件状态 public int getlconlDO;//获取插件的图标ID public int getld0;//获取插件的ID public String getName0”,//获取插件的名称 public boolean special0;// public String getPackageName0;//获取插件的包名称 public View getKeyboardView(Context context,int theme);//获取插件的输入视图(可以是软键盘,手写屏等 public void setOnKeyboardActionListener(OnKeyboardActionListener listener)’,//当软键盘被用户按了之后调用的回调函数 public-boolean isNeedShift0.J/是否需要考虑shm键状态 public boolean isShiftedO;//shift键状态 public void setShifted(boolean shifted);//设置shift键状态 public void updateKeyboardO;//更新软键盘 public View updateKeyboardView(Context context,int theme)’,//更新软键盘样式 public void setPreviewEnabled(boolean enable);,,设置是否允许按键预览 public void setPreviewCenterabled(boolean enable); J InputMethod提供了一个输入法的基本输入出。
但有些操作是每个输入法都会用到的。
为此基础该接口实现一个抽象类Ab.stractlnputMethod。
AbstraclInputMe£hod提供了一个更详细的输入法插件接口,同时包含每个输入法插件都会用到的使用函数(如isNumber0手0断用户是否点击了(软)键盘的数字键),和一些函数的默认返回值。
各种输入法插件需要实现以上插件。
4.3插件式输入法示例程序的实现 本插件系统的示例代码是在eclipse开发工具中完成。
在eclipse中新建project.命名为Switcher。
并按照Android的输入法框架API.实现一个输入法框架,主要增加一个方便用户选择输入法的界面。
增加类用来搜索和加载输入法插件。
具体的输入法实现时则是加载用户选择的输入法插件。
在eclipse中新建project,命名为QwertyPinyinlnputMethod,并新建一个带有corn.
android.1px.INPUMETHOD_PLUS属性的Activi-ty,该Activity继承Pluglnfo接口。
并新建一个类实现AbstractlnputMetbod接口,并实现输入法中具体算法功能。
本设计中的示例输入法插件是全键盘拼音输入法(QwertyPinyinlnputMethod),和全屏手写输A.法(HandwritinglnputMethod)。
编译project。
并生成apk安装文件。
安装输入法管理器,和2个输入法插件 adb install switcher.apk adb install pinyin.apk adb install handwriting.apk 在Android系统设置中选中我们安装的输入法。
并在输入框中选择使用我们刚刚安装输入法。
然后会弹出我们的输入法界面,按照Switcher中设定的开关。
可以选择不同的输入法插件,来实现不同方式的输入,程序执行界面如图3所示。
5总结 本文介绍了Android系统中插件式程序的设计思路。
并采用该 图3插件式输入法运行效果思路设计了插件式输入法程序。
本文所论述的插件式程序设计方法还可以用于多组件式程序,如包含多种在线小游戏的游戏大厅;还可以用于应用程序的升级更新等。
在本年底,国内各大手机厂商和电信运营公司将推出十几款运行Android系统或Android定制系统的手机,装载Android系统的手机将会很快风靡大陆。
同时包括谷歌公司,中国移动公司等多家公司已经推出手机应用软件在线商店,Android应用软件将会面临很大的需求。
参考文献:【l】Chen J.An Introduction to Android〔EB〕.Developer Advocate,Goosh I/0,2008.【2】陈木生.t;OOCLE ANDROID手机推出市场分析【J】.电子与电脑,2008(12).f3】王晓龙,王轩.基于Windows Mobile的智能手机汉字输入法研究【D】.哈尔滨:哈尔滨工业大学,2006.【4】钟茂生,王明文.软件设计模式及其使用【J】.计算机应用,2002,22(8):32—33. team.Inside the Android Application Framework〔EB〕.Goosle Ins,2008.【5】google androidf616 Haseman C.Android Essential〔M〕.Apress,2008:9—10.【7】胡明星,李双全,张激.基于嵌入式系统的中文输入法叨.计算机工程,2007(20):53—54. 本栏目责任编辑:谢媛媛 ··--_--·-软件设计开发··9981 万方数据
Android系统插件式输入法程序的设计作者: 李平新, LI Ping-xin作者单位: 同济大学软件学院上海200433刊名: 电脑知识与技术英文刊名: COMPUTER KNOWLEDGE AND TECHNOLOGY年,卷期: 2009535参考文献7条1.胡明星李双全张激 基于嵌入式系统的中文输入法期刊论文-计算机工程 2007202.Haseman C
Android Essential 20083.google
android team Inside the
Android Application Framework 20084.钟茂生王明文 软件设计模式及其使用期刊论文-计算机应用 2002085.王晓龙王轩 基于Windows Mobile的智能手机汉字输入法研究 20066.陈木生 GOOGLE
ANDROID手机推出市场分析期刊论文-电子与电脑 2008127.Chen J An Introduction to
Android 2008本文链接:http://d.g.wanfangdata.com.cn/Periodical_dnzsyjs-itrzyksb200935039.aspx.
上一篇:
Android文件系统及其linux内核的编译
下一篇:
电咖汽车入选2018独角兽企业榜百强 发布“天际”品牌将推高估值