1. 程式人生 > 其它 >Android 9.0 新增預置第三方輸入法/設定預設輸入法(軟鍵盤)

Android 9.0 新增預置第三方輸入法/設定預設輸入法(軟鍵盤)

結果展示

在介紹基本的調整方法前,先看看效果圖, 如下

調整方法

  • 程式碼位置

/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java

  • 修改步驟

(一) 設定啟用的輸入方法列表 /frameworks/base/packages/SettingsProvider/res/values/defaults.xml

比如我們新增一個輸入法,包名及名稱為:net.myself.inputmethod.swpinyin2/.SWIME,defaults.xml加入兩個字串常量,設定可選輸入法列表及預設輸入法如下:

<string name="enabled_input_methods" translatable="false">net.myself.inputmethod.swpinyin2/.SWIME:com.android.inputmethod.latin/.LatinIME</string>
<string name="default_input_method" translatable="
false">net.sunniwell.inputmethod.swpinyin2/.SWIME</string>

enabled_input_methods: 啟用的輸入方法列表

default_input_method:預設輸入法

(二) 載入到Setings資料庫 /frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

DatabaseHelper.java的loadSecureSettings方法中加入:

loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string
.enabled_input_methods); loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.default_input_method);

(三) 預設授予輸入法必要許可權 /frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java

在DefaultPermissionGrantPolicy.java的grantDefaultSystemHandlerPermissions函式中,加入

PackageParser.Package MY_IME2 = getSystemPackage("net.myself.inputmethod.swpinyin2");
if(MY_IME2 != null && doesPackageSupportRuntimePermissions(MY_IME2)){
     grantRuntimePermissions(MY_IME2, MICROPHONE_PERMISSIONS, userId);
     grantRuntimePermissions(MY_IME2, STORAGE_PERMISSIONS, userId);
     grantRuntimePermissions(MY_IME2, CONTACTS_PERMISSIONS, userId);
     grantRuntimePermissions(MY_IME2, LOCATION_PERMISSIONS, userId);
     grantRuntimePermissions(MY_IME2, CAMERA_PERMISSIONS, userId);
     grantRuntimePermissions(MY_IME2, PHONE_PERMISSIONS, userId);
     grantRuntimePermissions(MY_IME2, CALENDAR_PERMISSIONS, userId);
}

注:許可權根據實際需求修改

(四) 將需要預置的輸入法apk預編譯進image,打包,重新燒寫系統

經過如上調整,就可以在Settings中看到新增的第三方輸入法了,而且可以在Android原生輸入法和自己預置的輸入法間切換。

如果不需要Android原生輸入法可以將其直接刪掉。

大功告成!!

心有猛虎,細嗅薔薇,生活就該無懼無悔..... PS:文章系作者工作學習總結,受作者知識水平的限制,文章難免有錯誤之處,僅供參考,轉載請註明出處:http://www.cnblogs.com/roger-yu/