|
|
|
@ -51,6 +51,7 @@ class BleMediaService : Service(), CoroutineScope { |
|
|
|
|
|
|
|
private const val KEY_SERVER_URL = "serverurl" |
|
|
|
private const val KEY_USER_TOKEN = "usertoken" |
|
|
|
private const val KEY_SUPPORTED_LANGUAGES = "supportedLanguages" |
|
|
|
// 用于跟踪服务是否正在运行 |
|
|
|
private val isRunning = AtomicBoolean(false) |
|
|
|
|
|
|
|
@ -130,7 +131,10 @@ class BleMediaService : Service(), CoroutineScope { |
|
|
|
Log.d(TAG, "当前配置参数: $config") |
|
|
|
|
|
|
|
// 检查必要的配置是否存在 |
|
|
|
if (config[KEY_AZURE_SPEECH_KEY].isNullOrEmpty() || config[KEY_OPENAI_API_KEY].isNullOrEmpty()) { |
|
|
|
val azureSpeechKey = config[KEY_AZURE_SPEECH_KEY]?.toString() ?: "" |
|
|
|
val openaiApiKey = config[KEY_OPENAI_API_KEY]?.toString() ?: "" |
|
|
|
|
|
|
|
if (azureSpeechKey.isEmpty() || openaiApiKey.isEmpty()) { |
|
|
|
Log.w(TAG, "语音代理初始化失败: API密钥未配置") |
|
|
|
return |
|
|
|
} |
|
|
|
@ -159,8 +163,8 @@ class BleMediaService : Service(), CoroutineScope { |
|
|
|
/** |
|
|
|
* 从Intent中提取配置参数 |
|
|
|
*/ |
|
|
|
private fun extractConfigFromIntent(intent: Intent?): Map<String, String> { |
|
|
|
val config = mutableMapOf<String, String>() |
|
|
|
private fun extractConfigFromIntent(intent: Intent?): Map<String, Any> { |
|
|
|
val config = mutableMapOf<String, Any>() |
|
|
|
intent?.let { |
|
|
|
// 提取可能存在的配置参数 |
|
|
|
it.getStringExtra(KEY_AZURE_SPEECH_KEY)?.let { value -> config[KEY_AZURE_SPEECH_KEY] = value } |
|
|
|
@ -175,6 +179,13 @@ class BleMediaService : Service(), CoroutineScope { |
|
|
|
it.getStringExtra(KEY_VOLCANO_TOKEN)?.let { value -> config[KEY_VOLCANO_TOKEN] = value } |
|
|
|
it.getStringExtra(KEY_SERVER_URL)?.let { value -> config[KEY_SERVER_URL] = value } |
|
|
|
it.getStringExtra(KEY_USER_TOKEN)?.let { value -> config[KEY_USER_TOKEN] = value } |
|
|
|
|
|
|
|
// 提取 supportedLanguages 参数 |
|
|
|
it.getStringArrayListExtra(KEY_SUPPORTED_LANGUAGES)?.let { languages -> |
|
|
|
if (languages.isNotEmpty()) { |
|
|
|
config[KEY_SUPPORTED_LANGUAGES] = languages |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
Log.i(TAG, "从Intent中提取到配置参数: $config") |
|
|
|
return config |
|
|
|
@ -183,11 +194,25 @@ class BleMediaService : Service(), CoroutineScope { |
|
|
|
/** |
|
|
|
* 将配置参数保存到SharedPreferences |
|
|
|
*/ |
|
|
|
private fun saveConfigToPreferences(config: Map<String, String>, prefs: SharedPreferences) { |
|
|
|
private fun saveConfigToPreferences(config: Map<String, Any>, prefs: SharedPreferences) { |
|
|
|
prefs.edit().apply { |
|
|
|
config.forEach { (key, value) -> |
|
|
|
if (value.isNotEmpty()) { |
|
|
|
putString(key, value) |
|
|
|
when (value) { |
|
|
|
is String -> { |
|
|
|
if (value.isNotEmpty()) { |
|
|
|
putString(key, value) |
|
|
|
} |
|
|
|
} |
|
|
|
is List<*> -> { |
|
|
|
// 处理 supportedLanguages 列表 |
|
|
|
if (key == KEY_SUPPORTED_LANGUAGES) { |
|
|
|
val languageList = value.filterIsInstance<String>() |
|
|
|
if (languageList.isNotEmpty()) { |
|
|
|
// 将语言列表转换为逗号分隔的字符串保存 |
|
|
|
putString(key, languageList.joinToString(",")) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
apply() |
|
|
|
@ -197,21 +222,34 @@ class BleMediaService : Service(), CoroutineScope { |
|
|
|
/** |
|
|
|
* 从SharedPreferences获取配置 |
|
|
|
*/ |
|
|
|
private fun getConfigFromPreferences(prefs: SharedPreferences): Map<String, String> { |
|
|
|
return mapOf( |
|
|
|
KEY_AZURE_SPEECH_KEY to getConfigString(prefs, KEY_AZURE_SPEECH_KEY, ""), |
|
|
|
KEY_AZURE_SPEECH_REGION to getConfigString(prefs, KEY_AZURE_SPEECH_REGION, "eastasia"), |
|
|
|
KEY_OPENAI_API_KEY to getConfigString(prefs, KEY_OPENAI_API_KEY, ""), |
|
|
|
KEY_OPENAI_BASE_URL to getConfigString(prefs, KEY_OPENAI_BASE_URL, "https://api.openai.com/v1"), |
|
|
|
KEY_OPENAI_MODEL to getConfigString(prefs, KEY_OPENAI_MODEL, "gpt-3.5-turbo"), |
|
|
|
KEY_OPENAI_VISION_MODEL to getConfigString(prefs, KEY_OPENAI_VISION_MODEL, "gpt-4-vision-preview"), |
|
|
|
KEY_SYSTEM_PROMPT to getConfigString(prefs, KEY_SYSTEM_PROMPT, "gpt-3.5-turbo"), |
|
|
|
KEY_MCP_SERVER to getConfigString(prefs, KEY_MCP_SERVER, ""), |
|
|
|
KEY_VOLCANO_APP_ID to getConfigString(prefs, KEY_VOLCANO_APP_ID, ""), |
|
|
|
KEY_VOLCANO_TOKEN to getConfigString(prefs, KEY_VOLCANO_TOKEN, ""), |
|
|
|
KEY_SERVER_URL to getConfigString(prefs, KEY_SERVER_URL, ""), |
|
|
|
KEY_USER_TOKEN to getConfigString(prefs, KEY_USER_TOKEN, "") |
|
|
|
) |
|
|
|
private fun getConfigFromPreferences(prefs: SharedPreferences): Map<String, Any> { |
|
|
|
val config = mutableMapOf<String, Any>() |
|
|
|
|
|
|
|
// 添加字符串类型的配置参数 |
|
|
|
config[KEY_AZURE_SPEECH_KEY] = getConfigString(prefs, KEY_AZURE_SPEECH_KEY, "") |
|
|
|
config[KEY_AZURE_SPEECH_REGION] = getConfigString(prefs, KEY_AZURE_SPEECH_REGION, "eastasia") |
|
|
|
config[KEY_OPENAI_API_KEY] = getConfigString(prefs, KEY_OPENAI_API_KEY, "") |
|
|
|
config[KEY_OPENAI_BASE_URL] = getConfigString(prefs, KEY_OPENAI_BASE_URL, "https://api.openai.com/v1") |
|
|
|
config[KEY_OPENAI_MODEL] = getConfigString(prefs, KEY_OPENAI_MODEL, "gpt-3.5-turbo") |
|
|
|
config[KEY_OPENAI_VISION_MODEL] = getConfigString(prefs, KEY_OPENAI_VISION_MODEL, "gpt-4-vision-preview") |
|
|
|
config[KEY_SYSTEM_PROMPT] = getConfigString(prefs, KEY_SYSTEM_PROMPT, "gpt-3.5-turbo") |
|
|
|
config[KEY_MCP_SERVER] = getConfigString(prefs, KEY_MCP_SERVER, "") |
|
|
|
config[KEY_VOLCANO_APP_ID] = getConfigString(prefs, KEY_VOLCANO_APP_ID, "") |
|
|
|
config[KEY_VOLCANO_TOKEN] = getConfigString(prefs, KEY_VOLCANO_TOKEN, "") |
|
|
|
config[KEY_SERVER_URL] = getConfigString(prefs, KEY_SERVER_URL, "") |
|
|
|
config[KEY_USER_TOKEN] = getConfigString(prefs, KEY_USER_TOKEN, "") |
|
|
|
|
|
|
|
// 添加 supportedLanguages 参数处理 |
|
|
|
val supportedLanguagesStr = getConfigString(prefs, KEY_SUPPORTED_LANGUAGES, "") |
|
|
|
if (supportedLanguagesStr.isNotEmpty()) { |
|
|
|
// 将逗号分隔的字符串转换回语言列表 |
|
|
|
val languageList = supportedLanguagesStr.split(",").map { it.trim() }.filter { it.isNotEmpty() } |
|
|
|
if (languageList.isNotEmpty()) { |
|
|
|
config[KEY_SUPPORTED_LANGUAGES] = languageList |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return config |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|