为什么我的文本转语音的 onRangeStart() 方法没有执行?

Why my onRangeStart() method of text to speech is not executing?

我正在开发文本转语音应用程序,文本转语音工作正常,但现在我想在语音转文本引擎朗读每个单词时突出显示它。

但是,我已经重写了 onRangeStart() 方法,但实际上,它没有在我的设备(API-25)及以下设备中执行。

Text to Speech 在所有设备上都运行良好,但文本仅在 26+ API 设备中突出显示(在 TTS 处理时)。为什么会这样?如何使此功能向后兼容? 这是我的代码。

已实现 OnInitListener()

public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener {...

**这里是 onInit(){...}

 @Override
public void onInit(int i) {
    if (i == TextToSpeech.SUCCESS) {
        int result = mTTS.setLanguage(Locale.ENGLISH);

        if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS", "Language not supported");
        } else {
            mButtonSpeak.setEnabled(true);
        }
    } else {
        Log.e("TTS", "Initialization failed");
    }
    mTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() {
        @Override
        public void onStart(String s) { Log.d("TTS", "onStart: "+s); }

        @Override
        public void onDone(String s) { Log.d("TTS", "onDone: "); }

        @Override
        public void onError(String s) { Log.d("TTS", "onError: "); }


        @Override
        public void onRangeStart(String utteranceId, final int start, final int end, int frame) {
            super.onRangeStart(utteranceId, start, end, frame);
            Log.d(TAG, "onRangeStart: ");
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Spannable coloredText = new SpannableString(mTextParagraph.getText());
                    coloredText.setSpan(new ForegroundColorSpan(Color.GREEN),
                            start,
                            end,
                            Spanned.SPAN_INCLUSIVE_INCLUSIVE);
                    mTextParagraph.setText(coloredText);
                    Log.d(TAG, "Color: ");
                }
            });
        }
    });
}

这是因为 onRangeStart 是 added in API 26。因此,不幸的是,它不适用于 API 25.