一、修改默认语言
VoiceCommand 有自己的语言列表,默认只支持:zh-CN、zh-TW、en-US。
修改方式是将vendor/mediatek/proprietary/packages/apps/VoiceCommand/res/xml/voicelanguage.xml
中 DefaultLanguage 的值修改为列出来的 ID 值,代码如下:
<?xml version="1.0" encoding="UTF-8"?><Languages><Language TypeName="简体中文" ID="1" Code="zh-CN" FileName="keyword/1.xml" /><Language TypeName="繁體中文" ID="2" Code="zh-TW" FileName="keyword/2.xml" /><Language TypeName="English" ID="3" Code="en-US" FileName="keyword/3.xml" /><DefaultLanguage ID="1" /></Languages>
二、去除中文选项
还是修改上面这个文件,这是只需要将中文 Item注释掉,然后将English的ID修改为“1”,修改后的代码如下:
<?xml version="1.0" encoding="UTF-8"?><Languages><!-- <Language TypeName="简体中文" ID="1" Code="zh-CN" FileName="keyword/1.xml" /><Language TypeName="繁體中文" ID="2" Code="zh-TW" FileName="keyword/2.xml" /> --><Language TypeName="English" ID="1" Code="en-US" FileName="keyword/3.xml" /><DefaultLanguage ID="1" /></Languages>
三、语言与系统语言联动
前面已经说,VoiceCommand 有自己的独立语言列表,可以独立于系统语言进行涉设置。如果要想让 VoiceCommand 的语言随系统语言自动切换,可以将文件
vendor/mediatek/proprietary/packages/apps/VoiceCommand/res/xml/voicecustomization.xml
中的 SystemLanguage 值修改为 “TRUE”,修改后的代码如下:
<?xml version="1.0" encoding="UTF-8"?><VoiceCustomizations><VoiceCustomization SystemLanguage="TRUE" DefaultLanguage="zh-CN" /><!-- Language="简体中文" code="zh-CN"Language="繁体中文" code="zh-TW"Language="英文" code="en-US" --></VoiceCustomizations>
如上代码中的注释,这里默认情况下只支持:
zh-CN、zh-TW、en-US,而当系统语言切换为这 3 种之外的语言时,VoiceCommand的语言将保持为 上一次 的语言。
以下修改未做验证,仅供参考。
接上面的问题,如果想让 VoiceCommand 的语言能够在系统语言切换到 3 种之外的其他语言时,能自动切换回 VoiceCommand 支持的某一个语言,如“en-US”,可以按如下方法进行修改。
1、修改文件
vendor/mediatek/proprietary/packages/apps/VoiceCommand/res/xml/voicecustomization.xml
将 DefaultLanguage 的值修改为要自动切换回来的语言的代码,即“en-US”,修改后代码如下:
<?xml version="1.0" encoding="UTF-8"?><VoiceCustomizations><VoiceCustomization SystemLanguage="TRUE" DefaultLanguage="en-US" /><!-- Language="简体中文" code="zh-CN"Language="繁体中文" code="zh-TW"Language="英文" code="en-US" --></VoiceCustomizations>
需要注意的是,这里仍旧只支持设置为
zh-CN、zh-TW、en-US,这3种语言。
2、修改文件
vendor\mediatek\proprietary\packages\apps\VoiceCommand\src\com\mediatek\voicecommand\mgr\ConfigurationManager.java
将如下代码
public void updateCurLanguageIndex(String language) {if (language == null) {return;}for (int i = 0; i < mLanguageList.size(); i++) {if (language.equals(mLanguageList.get(i).mLanguageCode)) {mCurrentLanguageIndex = i;SharedPreferences languagePref = mContext.getSharedPreferences(mVoiceLanguageCacheFile, Context.MODE_PRIVATE);languagePref.edit().putInt(mCurSystemLanguageIndex, mCurrentLanguageIndex).apply();break;}}}
修改为
public void updateCurLanguageIndex(String language) {boolean flag = false;if (language == null) {return;}for (int i = 0; i < mLanguageList.size(); i++) {if (language.equals(mLanguageList.get(i).mLanguageCode)) {flag = true;mCurrentLanguageIndex = i;SharedPreferences languagePref = mContext.getSharedPreferences(mVoiceLanguageCacheFile, Context.MODE_PRIVATE);languagePref.edit().putInt(mCurSystemLanguageIndex, mCurrentLanguageIndex).apply();break;}}if (!flag) {mCurrentLanguageIndex = 2;}}
注意,这里的
mCurrentLanguageIndex = 2的值要和前面步骤1里面DefaultLanguage的值(en-US)在列表中的位置一致。
