2016-04-19 7 views
0
  • I Ansicht Pager hat, und einige Texte in jeder Seite, ich eine Taste, auf Knopfdruck Text-to-Speech-Ereignisse ist FeuerText-to-Speech in on View Pager

  • Ich weiß, wie Text-to-Speech zu verwenden, aber wenn es um viewPager kommt, ich weiß nicht

  • Code:

    public class MainActivity erweitert Aktivität implementiert 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); 
    } 
    

    }

- Wie dies in viewpager implementieren und sprechen (konvertieren) Text, der

in Seite sind insbesondere

Antwort

1

Der einfachste Weg zu machen wäre, die tts object statisch in MainActivity

Dann aus Ihren Fragmenten können Sie MainActivity.tts.stop() usw.

Es rufen wahrscheinlich besser t wäre o gehören einige Hilfsmethoden in MainActivity wie:

public static TextToSpeech getTTS(){ 
return tts; 
} 

und Null-Zeiger zu vermeiden:

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

Wo Sie eine statische boolean auf true gesetzt würde, wenn onInit SUCCESS zurückgegeben.

MainActivity würde weiterhin die

Als Randbemerkung, es ist immer gut, Praxis tts object in onDestroy usw. Freigabe zu handhaben die memory profiler in Android Studio zu überprüfen, um sicherzustellen, dass eine statische Referenz auf ein beliebiges Objekt wie diese halten nicht hat negative Auswirkungen. Führen Sie vor und nach der Analyse aus, und führen Sie den Garbage Collector manuell aus, um zu überprüfen, ob nach dem Löschen Ihrer Aktivität keine unerwünschten Referenzen vorhanden sind. Dies ist ein sehr generischer Ratschlag, aber wenn man einen solchen Code ändert, ist es gut zu wissen, dass es keine Nebenwirkungen gibt.

Verwandte Themen