Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133042
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 337
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-12 17:41
个人简介

活到老,学到老

文章分类
我的朋友

分类: Android平台

2014-03-13 10:24:36

1>  每一个输入法应用的源文件中都有个method.xml文件,在该文件中设置是否是第一次开机的时候系统默认输入法
如android系统默认的谷歌拼音输入法
packages/inputmethods/PinyinIME/res/xml/method.xml中
android:isDefault="@bool/im_is_default"

2>
所有输入法应用中也必须包含如下service
                android:label="@string/english_ime_name"
                android:permission="android.permission.BIND_INPUT_METHOD">
           
                android.view.InputMethod
" />//系统主要是通过该intent来搜集所有输入法应用信息
           
           
       

3> 开机的时候InputMethodManagerService中会对于默认输入法进行处理

 public InputMethodManagerService(Context context) {


 if (TextUtils.isEmpty(Settings.Secure.getString(
                mContext.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD))) {
            InputMethodInfo defIm = null;
            for (InputMethodInfo imi: mMethodList) {
                if (defIm == null && imi.getIsDefaultResourceId() != 0) {  //此处开机的时候判断是否是默认输入法
                    try { 
                        Resources res = context.createPackageContext(
                                imi.getPackageName(), 0).getResources();
                        if (res.getBoolean(imi.getIsDefaultResourceId())) {
                            defIm = imi;
                            Slog.i(TAG, "Selected default: " + imi.getId());
                        }
                    } catch (PackageManager.NameNotFoundException ex) {
                    } catch (Resources.NotFoundException ex) {
                    }
                }
            }
开机后setting provider 中会对系统中已经安装的输入法应用进行参数搜集和配置,在inputmenthodservice的构造寒水函数中,会去查询所有Interfilter 为android.view.InputMethod" /> 并保存在数组列表中,如果有package包更新,也会更新InputMethodInfo列表

阅读(4870) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~