И я также хочу переместить это в отдельный файл класса под названием 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) }
}
}
}
}
Почему первый вариант не работает и как его заставить работать?
/>
Не понимаю, потому что на самом деле в классе Helper есть и другие методы, и они прекрасно работают в активности, за исключением TextToSpeech.
Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-kotlin
Мобильная версия