Использование TextToSpeech из другого файла класса не работает в КотлинеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Использование TextToSpeech из другого файла класса не работает в Котлине

Сообщение Anonymous »

Я пытаюсь использовать TextToSpeech в действии.

И я также хочу переместить это в отдельный файл класса под названием Helper и загрузить его оттуда.

Поэтому я создал код ниже.

Код: Выделить всё

// Helper.kt
class Helper {
private var tts: TextToSpeech? = null

fun initTextToSpeech(context: Context) {
// 롤리팝(API 21, Android 5.0)이상에서만 지원됨
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Toast.makeText(context, "지원하지 않는 SDK 버전입니다.", Toast.LENGTH_SHORT).show()
return
}

tts = TextToSpeech(context) {
if (it == TextToSpeech.SUCCESS) {
val result = tts?.setLanguage(Locale.KOREAN)
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(context, "지원하지 않는 언어입니다.", Toast.LENGTH_SHORT).show()
//                    return@TextToSpeech
}
Toast.makeText(context, "TTS 설정 성공", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(context, "TTS 설정 실패", Toast.LENGTH_SHORT).show()
}
}
}

fun ttsSpeak(str: String) {
tts?.speak(str, TextToSpeech.QUEUE_FLUSH, null, "")
}
}

Я назвал это так в действии, как показано ниже, но это не сработало.

Ошибки нет, но это тоже не работает.< /p>

Код: Выделить всё

class QuizQuestionsActivity : AppCompatActivity(), View.OnClickListener {

private var btnAudio: ImageButton? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz_questions)

Helper().initTextToSpeech(this)

btnAudio = findViewById(R.id.btn_audio)
btnAudio?.setOnClickListener(this)

}

override fun onClick(view: View?) {

// 클릭된 view 요소에 따라 메서드 실행
when (view?.id) {
R.id.btn_audio -> {
val question = mQuestionList?.get(mCurrentPosition - 1)
question?.let { Helper().ttsSpeak(question.question) }
}
}
}
}
Хорошо будет работать, если я включу его в само действие, как показано ниже.

(* Обратите внимание, что некоторые части, не связанные напрямую, опущены.)

Код: Выделить всё

// QuizQuestionsActivity.kt

class QuizQuestionsActivity : AppCompatActivity(), View.OnClickListener {

private var btnAudio: ImageButton? = null
var tts: TextToSpeech? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz_questions)

initTextToSpeech()

btnAudio = findViewById(R.id.btn_audio)
btnAudio?.setOnClickListener(this)
}

fun initTextToSpeech() {
// 롤리팝(API 21, Android 5.0)이상에서만 지원됨
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Toast.makeText(this, "지원하지 않는 SDK 버전입니다.", Toast.LENGTH_SHORT).show()
return
}

tts = TextToSpeech(this) {
if (it == TextToSpeech.SUCCESS) {
val result = tts?.setLanguage(Locale.KOREAN)
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(this, "지원하지 않는 언어입니다.", Toast.LENGTH_SHORT).show()
//                    return@TextToSpeech
}
Toast.makeText(this, "TTS 설정 성공", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "TTS 설정 실패", Toast.LENGTH_SHORT).show()
}
}
}

fun ttsSpeak(str: String) {
tts?.speak(str, TextToSpeech.QUEUE_ADD, null, "")
}

override fun onClick(view: View?) {

// 클릭된 view 요소에 따라 메서드 실행
when (view?.id) {
R.id.btn_audio ->  {
val question = mQuestionList?.get(mCurrentPosition - 1)
question?.let { ttsSpeak(question.question) }
}
}
}
}

Я все еще новичок в Kotlin, поэтому не знаю причины.
Почему первый вариант не работает и как его заставить работать?
/>
Не понимаю, потому что на самом деле в классе Helper есть и другие методы, и они прекрасно работают в активности, за исключением TextToSpeech.

Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-kotlin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»