2012-08-04 2 views
2

저는 TTS (text-to-speech) 앱이 있으며 완벽하게 작동합니다. 것은 그것을 탭에 넣어야하고 탭은 잘 동작합니다. 그러나 tts를 탭 안에 넣으면 더 이상 작동하지 않습니다. 이미 클래스 이름, 레이아웃 및 패키지를 변경했습니다. 다른 모든 것들은 물론 변수를 제외하고는 꽤 변하지 않습니다. 레이아웃 괜찮아. 그리고 불행하게도 저는 그것을 탭에 넣어야합니다. 하지만 최악의 부분은 어떤 오류도 나타나지 않는다는 것입니다. 시도 잡기조차도 아무 것도 잡지 못합니다. 그래서 논리적 인 오류라고 생각합니다. 그리고 그것은 내 머리 속에있는 모든 논리를 빨아 먹었습니다. Lol. 나는이 활동이 불려지는 주요 활동을 점검했고, 명백했다. 코드는 다음과 같습니다.탭에 넣을 때 내 TTS (text-to-speech) Android 앱이 작동을 멈 춥니 다

package leytocz.add.andriod; 

import java.util.Locale; 
import android.app.Activity; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class nptab extends Activity implements TextToSpeech.OnInitListener{ 

    private TextToSpeech tts; 
    private Button btnSpeak; 
    private EditText txtText; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.nptab); 
     tts=new TextToSpeech(this,this); 
     btnSpeak=(Button) findViewById(R.id.btnSpeak); 
     txtText=(EditText) findViewById(R.id.txtText); 

     btnSpeak.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       speakOut(); 
      } 
     }); 
    } 
@Override 
public void onInit(int status) { 
    if (status==TextToSpeech.SUCCESS) { 
     int result=tts.setLanguage(Locale.US); 
     if (result==TextToSpeech.LANG_MISSING_DATA 
       || result==TextToSpeech.LANG_NOT_SUPPORTED) { 
      Log.e("TTS","This Language is not supported"); 
     } else { 
      btnSpeak.setEnabled(true); 
      speakOut(); 
     } 
    } else { 
     Log.e("TTS", "Initialization Failed!"); 
    } 
} 
private void speakOut() { 
    String text=txtText.getText().toString(); 
    tts.speak(text,TextToSpeech.QUEUE_FLUSH, null); 
} 
} 
+0

사람이 대답을하지 않는 이유는 무엇입니까? : –

+1

나는 비슷한 것을했고 TabHost에서 tts를 만들었고 다른 액티비티가이 tts-object를 사용하는 정적 메소드를 얻었습니다. 이것이 최선의 방법인지는 모르겠지만 완벽합니다. –

+0

당신이 문제가 해결되면 대답을 받아 들일 수 있겠습니까? –

답변

2

정확함.

static TextToSpeech mTTS; 

에서 onCreate()

Intent checkIntent = new Intent(); 
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

하여 onActivityResult :

if (requestCode == MY_DATA_CHECK_CODE && !mTTSInitialized) 
    { 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) 
     { 
      // success, create the TTS instance 
      mTTS = new TextToSpeech(this, (OnInitListener) this); 
      if (mTTS!=null) 
       mTTSInitialized = true; 
     } 
     else 
     { 
      // missing data, install it 
      Intent installIntent = new Intent(); 
      installIntent.setAction(
       TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installIntent); 
     } 
    } 

게터이 모두가 TabHost 자체에 배치

public static TextToSpeech getmTTS() { 
    return mTTS; 
} 

.

+0

잠깐, 설명해 줄 수 있니? –

+0

내가 tts에 전화하는 것과는 거리가 있습니다. 익숙하지 않습니다. 설명해주세요. 감사합니다. –

+0

글쎄, 회원 인 TextToSpeech 유형의 클래스 변수를 만듭니다 일반적으로 이러한 변수는 클래스 선언과 activities onCreate() 메서드 사이에 배치됩니다. 그런 다음 onCreate()에서 인 텐트를 만들어 전화기에서 TTS의 가용성을 확인합니다. –

0

귀하의 활동에이 많은 코드를 작성하지 않아도됩니다.이 행만 쓰면됩니다.이 문제가 결국 해결되었습니다.

변경 당신이

tts=new TextToSpeech(getParent(),this); 
같은 변경이 하나

tts=new TextToSpeech(this,this); --this is your code 

그것은 나를 위해 완벽하게 작동합니다

관련 문제