语音设置

This commit is contained in:
2026-05-19 17:47:58 +08:00
parent 157ac8be13
commit 7c26e90687
3 changed files with 152 additions and 41 deletions

View File

@@ -2,51 +2,107 @@ package com.example.defenseapplication.liveVideo
import android.content.Intent
import android.os.Bundle
import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.ImageView
import android.util.Log
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.SettingsActivityBinding
import com.example.defenseapplication.bean.DeviceBean
import com.example.defenseapplication.databinding.VoiceSettingsActivityBinding
import com.example.defenseapplication.utils.ApiService
import com.example.defenseapplication.utils.DeviceIdEvent
import com.example.defenseapplication.utils.RetrofitNetwork
import com.gyf.immersionbar.ImmersionBar
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
//语音设置
class VoiceSettingsActivity : AppCompatActivity() {
private lateinit var binding: VoiceSettingsActivityBinding
private lateinit var apiService: ApiService
private var deviceId: String? = null
private var originalAlertAudio: String? = null
private var originalAudioContent: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = VoiceSettingsActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
apiService = RetrofitNetwork.getNetworkService()
// ImmersionBar核心调用,沉浸式
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.swWarningVoice.setOnCheckedChangeListener { _, isChecked ->
when(isChecked) {
true -> {
// 打开开关业务逻辑
}
// 获取设备ID
deviceId = DeviceIdEvent.getDeviceId()
false -> {
// 关闭开关业务逻辑
}
}
// 从 Intent 获取设备数据
originalAlertAudio = intent.getStringExtra("alertAudio") ?: "1"
originalAudioContent = intent.getStringExtra("audioContent") ?: ""
// 设置Switch状态0->false1->true
binding.swWarningVoice.isChecked = originalAlertAudio == "1"
binding.swWarningVoice.setOnCheckedChangeListener { _, isChecked ->
// 开关状态变化时不立即请求,仅记录状态
}
binding.rlWarningContent.setOnClickListener {
val intent= Intent(this, WarningVoiceContentActivity::class.java)
startActivity(intent)
val intent = Intent(this, WarningVoiceContentActivity::class.java)
// 传递设备数据给警告语音内容页面
intent.putExtra("deviceId", deviceId)
intent.putExtra("audioContent", originalAudioContent)
startActivityForResult(intent, 1001)
}
binding.ivBack.setOnClickListener {
finish()
// 点击返回时触发修改设备请求
updateDeviceAlertAudio()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1001 && resultCode == RESULT_OK) {
// 获取从警告语音内容页面返回的音频内容
val newAudioContent = data?.getStringExtra("result")
originalAudioContent = newAudioContent
Log.d("WarningVoiceContentActivity", "newAudioContent: $newAudioContent")
if (newAudioContent != null) {}
}
}
private fun updateDeviceAlertAudio() {
deviceId?.let { id ->
val newAlertAudio = if (binding.swWarningVoice.isChecked) "1" else "0"
// 只有状态发生变化时才请求
if (newAlertAudio != originalAlertAudio) {
CoroutineScope(Dispatchers.IO).launch {
try {
val deviceBean = DeviceBean(id = id, alertAudio = newAlertAudio)
val response = apiService.updateDeviceInfo(deviceBean)
withContext(Dispatchers.Main) {
if (response.code == 200 && response.data != null) {
Toast.makeText(this@VoiceSettingsActivity, "修改成功", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@VoiceSettingsActivity, response.msg, Toast.LENGTH_SHORT).show()
}
finish()
}
} catch (e: Exception) {
withContext(Dispatchers.Main) {
Toast.makeText(this@VoiceSettingsActivity, "修改失败", Toast.LENGTH_SHORT).show()
finish()
}
}
}
} else {
finish()
}
}
}
}