在 Android 14(API level 34)及以上版本中,android.speech.SpeechRecognizer
提供了標準的語音識別能力,允許應用透過底層系統或指定的識別服務,將音訊輸入轉換為文字輸出。其主要功能包括:建立識別器實例、偵測系統是否支援識別、啟動/停止識別會話、取消或銷毀識別器,以及透過回呼介面接收識別結果和錯誤訊息。同時,Android 14 針對主執行緒呼叫、前台服務類型聲明等方面強化了行為約束,需要開發者註意避免 ANR 並正確配置服務類型。此外,API 在內網/雲端辨識、持續辨識及電量消耗等方面有侷限,需要根據應用場景選擇適當的實作方式。以下文件將從功能概覽、核心方法、回呼機制、權限與配置、Android 14 特性與限制五個部分進行介紹。
About 6 min
log:
Solutions
1. 確保 std::string
是有效的 UTF-8
env->NewStringUTF()
只能處理有效的 UTF-8 字符串。如果 transcribeMelBuffer
返回的 std::string
不是 UTF-8,則應該先進行轉換。例如:
std::string result = engine->transcribeMelBuffer(sampleVector);
// 確保 result 是 UTF-8
if (!isValidUTF8(result)) {
return env->NewStringUTF("Error: Invalid UTF-8 output");
}
return env->NewStringUTF(result.c_str());
About 2 min
Spinner
sample code
@Composable
fun SampleSpinner(
list: List<Pair<String, String>>,
preselected: Pair<String, String>,
onSelectionChanged: (selection: Pair<String, String>) -> Unit
) {
var selected by remember { mutableStateOf(preselected) }
var expanded by remember { mutableStateOf(false) } // initial value
Box {
Column {
OutlinedTextField(
value = (selected.second),
onValueChange = { },
label = { Text(text = "My List") },
modifier = Modifier.fillMaxWidth(),
trailingIcon = { Icon(Icons.Outlined.ArrowDropDown, null) },
readOnly = true
)
DropdownMenu(
modifier = Modifier.fillMaxWidth(),
expanded = expanded,
onDismissRequest = { expanded = false },
) {
list.forEach { entry ->
DropdownMenuItem(
modifier = Modifier.fillMaxWidth(),
onClick = {
selected = entry
expanded = false
},
text = {
Text(
text = (entry.second),
modifier = Modifier
.wrapContentWidth()
.align(Alignment.Start)
)
}
)
}
}
}
Spacer(
modifier = Modifier
.matchParentSize()
.background(Color.Transparent)
.padding(10.dp)
.clickable(
onClick = { expanded = !expanded }
)
)
}
}
@Preview(showBackground = true)
@Composable
fun SampleSpinner_Preview() {
MaterialTheme {
val entry1 = Pair("Key1", "Entry1")
val entry2 = Pair("Key2", "Entry2")
val entry3 = Pair("Key3", "Entry3")
SampleSpinner(
listOf(entry1, entry2, entry3),
preselected = entry2,
onSelectionChanged = { selected -> /* do something with selected */ }
)
}
}
Less than 1 minute
1. 簡介
在 Android 開發的世界中,UI 元件的設計歷來是開發者最重要的工作之一。傳統上,Android 使用 XML 布局來定義界面,然而,這種方法相對繁瑣,且缺乏靈活性。為了解決這些問題,Google 推出了 Jetpack Compose,一個基於 Kotlin 語言的 UI 架構,旨在使 UI 開發更加簡單、直觀、和靈活。
Jetpack Compose 的核心概念是“聲明式 UI”,這意味著開發者只需要描述界面應該是什麼樣的,框架會自動處理 UI 的更新和渲染。這種方式使得代碼更加簡潔且易於維護。
About 5 min
Android API 12+ App Launch Issue from Another App
To address the issue of launching an app from another app in Android API level 12 and above, follow these steps:
Update Manifest
Add the following to your AndroidManifest.xml
:
<manifest>
<queries>
<package android:name="package.of.app.you.wanna.open"/>
</queries>
</manifest>
Less than 1 minute