如何在Android6.0 設(shè)置默認(rèn)輸入法
Android6.0設(shè)置默認(rèn)輸入法,這里以日文輸入法為例,
1.在frameworks/base/packages/SettingsProvider/res/values/defaults.xml 添加:
jp.co.omronsoft.openwnn/.OpenWnnJAJP
2.在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java添加:
loadStringSetting(stmt,?Settings.Secure.DEFAULT_INPUT_METHOD,R.string.def_input_method?);
這個(gè)方法加在private void loadSecureSettings(SQLiteDatabase db)這個(gè)里面。
3.使能所有輸入法,frameworks/base/core/java/com/android/internal/inputmethod/InputMethodUtils.java
---?a/frameworks/base/core/java/com/android/internal/inputmethod/InputMethodUtils.java +++?b/frameworks/base/core/java/com/android/internal/inputmethod/InputMethodUtils.java @@?-926,7?+926,7?@@?public?class?InputMethodUtils?{ ?????????//?At?the?initial?boot,?the?settings?for?input?methods?are?not?set, ?????????//?so?we?need?to?enable?IME?in?that?case. ?????????public?void?enableAllIMEsIfThereIsNoEnabledIME()?{ -????????????if?(TextUtils.isEmpty(getEnabledInputMethodsStr()))?{ +????????????if?(!TextUtils.isEmpty(getEnabledInputMethodsStr()))?{ ?????????????????StringBuilder?sb?=?new?StringBuilder(); ?????????????????final?int?N?=?mMethodList.size(); ?????????????????for?(int?i?=?0;?i?<?N;?i++)?{
這里的jp.co.omronsoft.openwnn/.OpenWnnJAJP是輸入法ID,每個(gè)輸入法都有自己的ID,如果不知道輸入法ID,可以通過下面的打印方法獲取:
frameworks/base/services/core/java/com/android/server/InputMethodManagerService.java
?void?buildInputMethodListLocked(ArrayListlist, ????????????HashMapmap,?boolean?resetDefaultEnabledIme)?{ ????????if?(DEBUG)?{ ????????????Slog.d(TAG,?"---?re-buildInputMethodList?reset?=?"?+?resetDefaultEnabledIme ????????????????????+?"?n?------?n"?+?InputMethodUtils.getStackTrace()); ????????} ????????list.clear(); ????????map.clear(); ????????//?Use?for?queryIntentServicesAsUser ????????final?PackageManager?pm?=?mContext.getPackageManager(); ????????String?disabledSysImes?=?mSettings.getDisabledSystemInputMethods(); ????????if?(disabledSysImes?==?null)?disabledSysImes?=?""; ????????final?Listservices?=?pm.queryIntentServicesAsUser( ????????????????new?Intent(InputMethod.SERVICE_INTERFACE), ????????????????PackageManager.GET_META_DATA?|?PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, ????????????????mSettings.getCurrentUserId()); ????????final?HashMap<String,?List>?additionalSubtypes?= ????????????????mFileManager.getAllAdditionalInputMethodSubtypes(); ????????for?(int?i?=?0;?i?<?services.size();?++i)?{ ????????????ResolveInfo?ri?=?services.get(i); ????????????ServiceInfo?si?=?ri.serviceInfo; ????????????ComponentName?compName?=?new?ComponentName(si.packageName,?si.name); ????????????if?(!android.Manifest.permission.BIND_INPUT_METHOD.equals( ????????????????????si.permission))?{ ????????????????Slog.w(TAG,?"Skipping?input?method?"?+?compName ????????????????????????+?":?it?does?not?require?the?permission?" ????????????????????????+?android.Manifest.permission.BIND_INPUT_METHOD); ????????????????continue; ????????????} ????????????if?(DEBUG)?Slog.d(TAG,?"Checking?"?+?compName); //打印添加在這里,打印所有輸入法的ID ????????????Slog.d(TAG,?"Checking?packageName:"?+?si.packageName?+?"??name:"?+?si.name); ????????????try?{ ????????????????InputMethodInfo?p?=?new?InputMethodInfo(mContext,?ri,?additionalSubtypes); ????????????????list.add(p); ????????????????final?String?id?=?p.getId(); ????????????????map.put(id,?p); ????????????????if?(DEBUG)?{ ????????????????????Slog.d(TAG,?"Found?an?input?method?"?+?p); ????????????????}
重新編譯,燒錄測試ok。