一、修改默认语言

VoiceCommand 有自己的语言列表,默认只支持:zh-CNzh-TWen-US

修改方式是将
vendor/mediatek/proprietary/packages/apps/VoiceCommand/res/xml/voicelanguage.xml
中 DefaultLanguage 的值修改为列出来的 ID 值,代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Languages>
  3. <Language TypeName="简体中文" ID="1" Code="zh-CN" FileName="keyword/1.xml" />
  4. <Language TypeName="繁體中文" ID="2" Code="zh-TW" FileName="keyword/2.xml" />
  5. <Language TypeName="English" ID="3" Code="en-US" FileName="keyword/3.xml" />
  6. <DefaultLanguage ID="1" />
  7. </Languages>

二、去除中文选项

还是修改上面这个文件,这是只需要将中文 Item注释掉,然后将EnglishID修改为“1”,修改后的代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Languages>
  3. <!-- <Language TypeName="简体中文" ID="1" Code="zh-CN" FileName="keyword/1.xml" />
  4. <Language TypeName="繁體中文" ID="2" Code="zh-TW" FileName="keyword/2.xml" /> -->
  5. <Language TypeName="English" ID="1" Code="en-US" FileName="keyword/3.xml" />
  6. <DefaultLanguage ID="1" />
  7. </Languages>

三、语言与系统语言联动

前面已经说,VoiceCommand 有自己的独立语言列表,可以独立于系统语言进行涉设置。如果要想让 VoiceCommand 的语言随系统语言自动切换,可以将文件

  1. vendor/mediatek/proprietary/packages/apps/VoiceCommand/res/xml/voicecustomization.xml

中的 SystemLanguage 值修改为 “TRUE”,修改后的代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <VoiceCustomizations>
  3. <VoiceCustomization SystemLanguage="TRUE" DefaultLanguage="zh-CN" />
  4. <!-- Language="简体中文" code="zh-CN"
  5. Language="繁体中文" code="zh-TW"
  6. Language="英文" code="en-US" -->
  7. </VoiceCustomizations>

如上代码中的注释,这里默认情况下只支持:zh-CNzh-TWen-US,而当系统语言切换为这 3 种之外的语言时,VoiceCommand 的语言将保持为 上一次 的语言。


以下修改未做验证,仅供参考。

接上面的问题,如果想让 VoiceCommand 的语言能够在系统语言切换到 3 种之外的其他语言时,能自动切换回 VoiceCommand 支持的某一个语言,如“en-US”,可以按如下方法进行修改。
1、修改文件

  1. vendor/mediatek/proprietary/packages/apps/VoiceCommand/res/xml/voicecustomization.xml

将 DefaultLanguage 的值修改为要自动切换回来的语言的代码,即“en-US”,修改后代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <VoiceCustomizations>
  3. <VoiceCustomization SystemLanguage="TRUE" DefaultLanguage="en-US" />
  4. <!-- Language="简体中文" code="zh-CN"
  5. Language="繁体中文" code="zh-TW"
  6. Language="英文" code="en-US" -->
  7. </VoiceCustomizations>

需要注意的是,这里仍旧只支持设置为zh-CNzh-TWen-US,这3种语言。

2、修改文件

  1. vendor\mediatek\proprietary\packages\apps\VoiceCommand\src\com\mediatek\voicecommand\mgr\ConfigurationManager.java

将如下代码

  1. public void updateCurLanguageIndex(String language) {
  2. if (language == null) {
  3. return;
  4. }
  5. for (int i = 0; i < mLanguageList.size(); i++) {
  6. if (language.equals(mLanguageList.get(i).mLanguageCode)) {
  7. mCurrentLanguageIndex = i;
  8. SharedPreferences languagePref = mContext.getSharedPreferences(
  9. mVoiceLanguageCacheFile, Context.MODE_PRIVATE);
  10. languagePref.edit().putInt(mCurSystemLanguageIndex, mCurrentLanguageIndex).apply();
  11. break;
  12. }
  13. }
  14. }

修改为

  1. public void updateCurLanguageIndex(String language) {
  2. boolean flag = false;
  3. if (language == null) {
  4. return;
  5. }
  6. for (int i = 0; i < mLanguageList.size(); i++) {
  7. if (language.equals(mLanguageList.get(i).mLanguageCode)) {
  8. flag = true;
  9. mCurrentLanguageIndex = i;
  10. SharedPreferences languagePref = mContext.getSharedPreferences(
  11. mVoiceLanguageCacheFile, Context.MODE_PRIVATE);
  12. languagePref.edit().putInt(mCurSystemLanguageIndex, mCurrentLanguageIndex).apply();
  13. break;
  14. }
  15. }
  16. if (!flag) {
  17. mCurrentLanguageIndex = 2;
  18. }
  19. }

注意,这里的 mCurrentLanguageIndex = 2 的值要和前面 步骤1 里面 DefaultLanguage 的值(en-US)在列表中的位置一致。