一、修改默认语言
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
)在列表中的位置一致。