2013-08-13 3 views
0

Я пытаюсь начать другую деятельность в моей основной деятельности, используя этот метод:Android переключения Деятельность Черный экран

public void switchToRead(){// Switches to the reading view which displays the text that the tts engine reads off. 
    Intent intent = new Intent(getApplicationContext(),ReadOut.class); 
    intent.putExtra("response", res); 
    startActivity(intent); 
} 

Это начинается следующий класс:

package com.example.webview; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.content.Intent; 
import android.speech.tts.TextToSpeech; 
import android.text.method.ScrollingMovementMethod; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class ReadOut extends Activity implements TextToSpeech.OnInitListener, OnClickListener { 


    boolean paused = false; 
    String leftToRead = null; 
    String res = null; 
    TextToSpeech tts; 

    protected void onPreExecute() 
    { 
     System.out.println("Pre-execute"); 

    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.read_out); 
     Intent intent = getIntent(); 
     res = intent.getExtras().getString("response"); 
     TextView textv = (TextView) findViewById(R.id.textView1); 
     textv.setText(res); 
     textv.setMovementMethod(new ScrollingMovementMethod()); 
     android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
     textv.setHeight((int)(display.getHeight()*0.76)); 
     System.out.println("START"); 
     tts = new TextToSpeech(this, this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     return true; 
    } 

    public String speakFull(String text){ 
     System.out.println("Speaking: " + text); 
     System.out.println("Speaking"); 
     String[] sentences = text.split("\n|\\.(?!\\d)|(?<!\\d)\\."); // Regex that splits the body of text into the sentences of that body which are stored in a String array. 
     for(int i = 0; i < sentences.length; i++){ 
      if(!tts.isSpeaking() && !paused){ 
       System.out.println("Speaking: " + i); 
       tts.speak(sentences[i], TextToSpeech.QUEUE_FLUSH, null); 
      }else if(paused){ 
       System.out.println("Paused"); 
       String paused = ""; 
       int k = 0; 
       if(i != 0){ 
        k = i-1; 
       } 
       leftToRead = null; 
       for(int j = k; j < sentences.length; j++){ 
        leftToRead += sentences[j]; 
       } 
       return leftToRead; 
      }else{ 
       i--; 
       System.out.println("Sleeping"); 
       System.out.println("Speaking : " + tts.isSpeaking()); 
       try { 
        Thread.sleep(1000); 
       } catch(InterruptedException ex) { 
        Thread.currentThread().interrupt(); 
       } 
      } 
      if(i == sentences.length - 1){ 
       return "Message 001: Complete"; 
      } 
     } 
     return null; 
    } 

    @Override 
    public void onInit(int arg0) { 
      System.out.println("speakFull"); 
      leftToRead = speakFull(res); 

    } 

    public void clickPause(View v){ 
     if(paused){ 
      paused = false; 
      Button b = (Button) findViewById(R.id.button1); 
      b.setText("Play"); 
     }else{ 
      paused = true; 
      Button b = (Button) findViewById(R.id.button1); 
      b.setText("Pause"); 
      if(leftToRead == null){ 
       leftToRead = speakFull(res); 
      }else{ 
       leftToRead = speakFull(leftToRead); 
      } 
     } 
    } 

    @Override 
    public void onClick(DialogInterface arg0, int arg1) { 
     // TODO Auto-generated method stub 

    } 

} 

После запуска класса READOUT одна из двух вещей может произойти, либо экран становится черным, текст в речь начинает читаться, а приложение сообщает мне, что оно не отвечает, или оно показывает мне представление для ReadOut, читает текст в речь, а затем сообщает меня это не отвечает. Я действительно смущен, почему это происходит, и любое понимание будет оценено по достоинству.

+0

Вы пытались отладить этот код? Я думаю, что эта ошибка может исходить от этой части, начиная с TextView texttv до tts = new TextToSpeech –

+0

Хорошо, я переехал tts = new TextToSpeech (это, это); к первой строке метода talkFull, теперь он переключает представления в порядке, но не читает текст. –

+0

hmm попробуйте добавить часть части к коду, как удалить все, как дисплей и tts, и сохранить текст и т. Д., Пока не получите проблему –

ответ

2

Я ничего об использовании ТТС не знаю, но я могу вам сказать, что эта линия, вероятно, вызывает проблему

Thread.sleep(1000); 

Вероятно вы вызываете его на UI Thread, который не является хорошей идеей. Вам нужно использовать фон Thread и обновить его чем-то вроде runOnUiThread() или AsyncTask или вы можете использовать Handler.

Смежные вопросы