Я использую класс Android TextToSpeech. Все работает нормально. Однако существуют языки/локали, которые по умолчанию не установлены, но поддерживаются механизмом TTS, и я не могу зафиксировать состояние отсутствующих речевых данных.
При подключении к Интернету, когда я пытаюсь установить язык в новый языковой стандарт, который его речевые данные не были загружены, он просто загрузит голосовые данные и выполнит метод разговора нормально/успешно.
Однако при отключении Интернета, когда я пытаюсь установить LanguageLanguage в новую локаль, которую его речевые данные не были загружены, он пытается загрузить голосовые данные. Но без Интернета он просто указывает на "загрузку" на экране настроек "TTS voice data" в разделе "Язык и ввод" для выбранного языка, без каких-либо успехов. И, как и ожидалось, метод разговора не работает, поскольку голосовые данные не загружаются. Когда это произойдет, я думаю, что методы TTS setLanguage/isLanguageAvailable вернут мне LANG_MISSING_DATA, чтобы захватить это состояние, однако он просто возвращает LANG_COUNTRY_AVAILABLE. Ситуация показана на этом изображении:
Я хочу иметь возможность обнаруживать, когда речевые данные выбранного языкового стандарта не загружаются/отсутствуют, а также дают тост-сообщение или прямой пользователь для его загрузки. Я видел несколько сообщений, предлагающих использовать isLanguageAvailable, как этот один. Я также посмотрел документацию по Android, и кажется, что возвращаемые значения isLanguageAvailable должны фиксировать состояние отсутствующих голосовых данных с помощью LANG_MISSING_DATA.
Я также попытался отправить намерение с ACTION_CHECK_TTS_DATA, как другой способ проверить отсутствующие данные, как это предлагается в документации по Android, которую я связал. Тем не менее, resultCode снова не зафиксировал/не указал, что голосовые данные отсутствуют (CHECK_VOICE_DATA_FAIL), но вместо этого возвращен CHECK_VOICE_DATA_PASS.
В этом случае, как я должен отображать состояние языка/локали, доступное/поддерживаемое, при отсутствии голосовых данных? Мне также интересно, почему CHECK_VOICE_DATA_PASS и LANG_MISSING_DATA не являются возвращаемыми значениями. Когда голосовые данные отсутствуют, не следует ли возвращать эти значения? Благодарю! Ниже приведено возвращаемое значение, когда я пытаюсь использовать setLanguage и isLanguageAvailable на локалях, у которых не были загружены его голосовые данные (0 и 1 - это возвращаемое значение метода, показанного в журналах, -1 - это тот, который соответствует отсутствующему голосу данные):