Код: Выделить всё
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.example.composetutorial.R
class MainActivity : AppCompatActivity() {
private lateinit var translationService: TranslationService
private lateinit var translateButton: Button
private lateinit var resultTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
translationService = TranslationService()
translateButton = findViewById(R.id.translateButton)
resultTextView = findViewById(R.id.resultTextView)
translateButton.setOnClickListener {
val audioFilePath = "./audio.wav"
val targetLanguage = "en" // 目标语言,例如英语
translationService.translateAudio(audioFilePath, targetLanguage) { translatedText ->
runOnUiThread {
resultTextView.text = translatedText ?: "翻译失败"
}
}
}
}
}
Код: Выделить всё
import okhttp3.\*
import java.io.File
import java.io.IOException
import android.util.Base64
class TranslationService {
private val client = OkHttpClient()
fun translateAudio(audioFilePath: String, targetLanguage: String, callback: (String?) -> Unit) {
// 读取音频文件并转换为Base64
val audioFile = File(audioFilePath)
val audioBytes = audioFile.readBytes()
val base64Audio = Base64.encodeToString(audioBytes, Base64.DEFAULT)
// 创建JSON请求体
val requestBody = FormBody.Builder()
.add("audio", base64Audio)
.add("target_language", targetLanguage)
.build()
// 创建请求
val request = Request.Builder()
.url("127.0.0.1/8088")
.post(requestBody)
.build()
// 发送请求
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
response.use {
if (!it.isSuccessful) throw IOException("Unexpected code $response")
// 解析响应
val translatedText = it.body?.string()
callback(translatedText)
}
}
override fun onFailure(call: Call, e: IOException) {
callback(null)
}
})
}
}
Код: Выделить всё
\
\
\
Код: Выделить всё
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
android {
namespace = "com.example.composetutorial"
compileSdk = 35
defaultConfig {
applicationId = "com.example.composetutorial"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.1"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
implementation(libs.androidx.appcompat)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
// 使用libs定义的方式
implementation(libs.okhttp)
implementation(libs.moshi)
implementation(libs.androidx.appcompat) // 确保这个是正确的引用
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -app-crash
Мобильная версия