마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

액티비티 전환시 tts 자동 실행이 안되게 하는 방법

0 추천

안녕하세요! 간략하게 설명 드리면 서브 액티비티들로 가는 메인 액티비티가 있고, 서브 액티비티로 이동하면 edittext와 tts기능을 구현 해놓은 버튼, 그리고 edittext에 단어를 추가할 수 있는 단어 버튼들로 구현 해둔 상태입니다. 여기서 문제는 서브액티비티로 이동하여 TTS를 구현해놓은 버튼을 누를 때만 음성이 출력이 되어야 하는데, 서브액티비티로 이동하는 순간 자동으로 TTS기능이 실행됩니다! 

즉, 액티비티를 이동하면 자동으로 음성출력이 실행됩니다!! 개발자라 하기도 부끄러운 초보라 어디 부분을 봐야 하는지 모르겠습니다 ㅠㅠ 도와주십쇼 고수님들!!

 

코드는 글자수 제한상 tts와 액티비티 이동에 관한 부분만 남겼습니다. 

메인 - <MainActivity.java>

package test.study;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    TextView tv_main;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_main);

        // 상징 각 카테고리로 이동하는 버튼
        Button btn_go_인사 = (Button) findViewById(R.id.button_select_인사);
        btn_go_인사.setOnClickListener(
                new Button.OnClickListener() {
                    public void onClick(View v) {
                        Intent intent = new Intent(getApplicationContext(), SelectHelloActivity.class);
                        intent.putExtra("sendData",tv_main.getText().toString());
                        startActivity(intent);

                    }
                }
        );
    }
}

 

서브 <SelectHelloActivity.java>

package test.study;

import java.util.Locale;

import android.content.Intent;
import android.speech.tts.TextToSpeech;
import android.support.v7.app.AppCompatActivity;
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 SelectHelloActivity extends AppCompatActivity implements 
View.OnClickListener, TextToSpeech.OnInitListener {

    Button buttonEvent;
    EditText ed_main;

    // TTS
    TextToSpeech tts;
    Button btnSpeak;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_hello);

        // TTS 버튼
        tts = new TextToSpeech(this, this);
        btnSpeak = (Button) findViewById(R.id.button_Speak);

        btnSpeak.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                speakOut();
            }
        });
    }

    @Override
    public void onDestroy() {
        if (tts != null) {
            tts.stop();
            tts.shutdown();
        }
        super.onDestroy();
    }

    @Override
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            int result = tts.setLanguage(Locale.KOREA);
            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "지원되지 않는 언어입니다.");
            } else {
                btnSpeak.setEnabled(true);
                speakOut();
            }
        } else {
            Log.e("TTS", "출력 실패!");
        }
    }

    private void speakOut(){
        String text = ed_main.getText().toString();
        tts.speak(text, TextToSpeech.QUEUE_FLUSH,null, null);
    }
}
익명사용자 님이 2018년 5월 27일 질문
onInit()함수에 speakOut()이 들어 있네요 삭제하시면 될 것 같습니다.

1개의 답변

0 추천
// TTS 버튼
        tts = new TextToSpeech(this, this);

를 speakOut 에 넣으세요 null 일 경우에만 인스턴스 하게 하구요 

 

aucd29 (218,390 포인트) 님이 2018년 5월 28일 답변
작성자입니다! 해결은 다른방법을 통해했지만 답변 감사드립니다!
어떻게 해결하셨는지 알수 있을까요??
...