2016-10-28 50 views

回答

0

任何解決方案例如,您可以通過一個有效的Context你的簡單類的構造函數中,然後你可以從簡單的類使用TTS:

public class MySimpleClass implements TextToSpeech.OnInitListener { 

    private TextToSpeech tts; 
    private boolean ttsOk; 

    // The constructor will create a TextToSpeech instance. 
    MySimpleClass(Context context) { 
    tts = new TextToSpeech(context, this); 
    } 

    @Override 
    // OnInitListener method to receive the TTS engine status 
    public void onInit(int status) { 
    if (status == TextToSpeech.SUCCESS) { 
     ttsOk = true; 
    } 
    else { 
     ttsOk = false; 
    } 
    } 

    // A method to speak something 
    @SuppressWarnings("deprecation") // Support older API levels too. 
    public void speak(String text, Boolean override) { 
    if (ttsOk) { 
     if (override) { 
     tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);  
     }  
     else { 
     tts.speak(text, TextToSpeech.QUEUE_ADD, null);  
     } 
    } 
    } 

    // Other code goes here... 

} 

And de待確切的應用程序設計Context可能是Activity或應用程序上下文。如果接收上下文引用的類的生命週期超過提供它的類的生命週期,則應該使用後者。例如,Activity可能會被銷燬,而引用它的類仍然存在。這會影響垃圾回收和泄漏內存。

另一種選擇是保持所有TTS在Activity代碼當使用「簡單類」代碼,其被示出,通過「簡單的類」到Activity的引用,並具有在Activity的公共方法來接收需要文字說出:

public class MySimpleClass { 

    private MyActivity myActivity; 

    // The constructor receives a reference to the Activity. 
    MySimpleClass(MyActivity activity) { 
    myActivity = activity; 
    } 

    // Other code goes here... 

    myActivity.speak("Hello, Stackoverflow!"); 

} 

並再次路過時的參考一Activity這樣一個應該考慮的類的生命週期和避免仍然可以存在於類參考後Activity是銷燬。

另一種選擇是爲TTS代碼設置一個單獨的類。這將需要一個Context作爲構造函數參數,並提供一種方法來說出任何給定的文本。 this answer to another question有一個簡單的例子。

+0

對於我的情況不是一個很好的解決方案與類的構造器 仍然我有一個解決方案,我不知道它是否會工作或不能我可以創建一個靜態方法,我將調用speechClass它擴展了Activity並從我的類中調用speechClass? – islamoc

+0

當然,不用使用構造函數,你可以在你的類中有一個單獨的'setContext(Context ctx)'方法並以這種方式接收它。如果你的意思是讓你的類擴展Activity,並用'speechClass = new SpeechClass()'實例化它,那麼我會說它不起作用。上下文將是'null'。它必須是一個「真正的」活動「」,它實際上是由Android系統構建的,並顯示在用戶界面上。一個'Service'也可以訪問'Context',所以如果你想通過擴展一個類來獲得上下文,你可以有一個'SpeechClass'服務。也許過度殺傷... –

相關問題