2016-04-19 12 views
0
上で
  • 私はビューページャ、およびすべてのページにいくつかのテキストを持っているが、私は、ボタンを押してテキストを音声に変換するイベントで、ボタンを持っている私が知っているテキスト読み上げビューページャ

  • 火事ですどのようにテキストを音声に変換を使用しますが、それはviewPagerに来るとき、私は知らないする

  • コード:

    パブリッククラスMainActivityアクティビティが TextToSpeech.OnInitListener {

    を実装して拡張
    private TextToSpeech tts; 
    private Button btnSpeak; 
    private EditText txtText; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    
    
        tts = new TextToSpeech(this, this); 
    
        btnSpeak = (Button) findViewById(R.id.btnSpeak); 
    
        txtText = (EditText) findViewById(R.id.txtText); 
    
        // button on click event 
        btnSpeak.setOnClickListener(new View.OnClickListener() { 
    
         @Override 
         public void onClick(View arg0) { 
          speakOut(); 
         } 
    
        }); 
    } 
    
    @Override 
    public void onDestroy() { 
        // Don't forget to shutdown! 
        if (tts != null) { 
         tts.stop(); 
         tts.shutdown(); 
        } 
        super.onDestroy(); 
    } 
    
    @Override 
    public void onInit(int status) { 
        // TODO Auto-generated method stub 
    
        if (status == TextToSpeech.SUCCESS) { 
    
         int result = tts.setLanguage(Locale.US); 
    
         // tts.setPitch(5); // set pitch level 
    
         // tts.setSpeechRate(2); // set speech speed rate 
    
         if (result == TextToSpeech.LANG_MISSING_DATA 
           || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
          Log.e("TTS", "Language is not supported"); 
         } else { 
          btnSpeak.setEnabled(true); 
          speakOut(); 
         } 
    
        } else { 
         Log.e("TTS", "Initilization Failed"); 
        } 
    
    } 
    
    private void speakOut() { 
    
        String text = txtText.getText().toString(); 
    
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
    } 
    

    }

- viewpagerでこれを実装し、話す方法(変換)ページ

答えて

1

に特定されているテキストMainActivity

tts object静的を作ることであろう最も簡単な方法

あなたの断片から、MainActivity.tts.stop()などと呼ぶことができます。

これはおそらくOなどMainActivityにおけるいくつかのヘルパーメソッドが含ま:

public static TextToSpeech getTTS(){ 
return tts; 
} 

をし、nullポインタを避けるために:onInitはSUCCESSを返した場合はtrueに静的なブール値を設定します

public static boolean isTTSAvailable(){ 
return tts != null // && ttsInitialised 
} 

MainActivityonDestroytts objectを解放対処し続けるなど

側の注意点としては、それはこのような任意のオブジェクトへの静的な参照を保持することはありませんを持っていることを確認しmemory profiler in Android Studioをチェックアウトすることは常に良い習慣です有害な影響。分析の前後で行い、ガベージコレクタを手動で実行して、アクティビティが破棄された後に不要な参照を保持していないことを確認します。これは非常に一般的なアドバイスですが、このようなコードを変更するときはいつでも、副作用がないことを知っておくと良いでしょう。

関連する問題