from time import sleep from jnius import autoclass from plyer.facades import TTS from plyer.platforms.android import activity Locale = autoclass('java.util.Locale') TextToSpeech = autoclass('android.speech.tts.TextToSpeech') class AndroidTextToSpeech(TTS): def _speak(self, **kwargs): tts = TextToSpeech(activity, None) tts.setLanguage(Locale.US) retries = 0 # First try rarely succeeds due to some timing issue message = kwargs.get('message') # first try for while loop speak_status = tts.speak( message, TextToSpeech.QUEUE_FLUSH, None ) # -1 indicates error. Let's wait and then try again while retries < 100 and speak_status == -1: sleep(0.1) retries += 1 speak_status = tts.speak( message, TextToSpeech.QUEUE_FLUSH, None ) def instance(): return AndroidTextToSpeech()