Glass AI Chat
Purpose
Demonstrate booting AI chat sessions, submitting user prompts, and collecting incremental model output on the glasses.
Entry points
Glass home:
HomeActivity→SdkMediaActivity
Sample Activity:
com.rokid.glass.SdkMediaActivity
Platform
- Glass
Main file
Hot spots
binding.btnAiChat.setOnClickListenerbinding.btnStopAiChat.setOnClickListenermAIChaListerstub implementation
Bundle with:
- SendMessageActivity.kt — ASR/TTS flows
- HomeActivity.kt — offline wake-word registry
Related docs
Flow
- Tap the AI shortcut.
GlassSdk.getGlassAiChatService()?.startAiChat(false)boots the session channel.toAiChat(...)submits the canned prompt bundled with upstream (same wording as upstream repo).AiChatListenerstreams partial + final payloads.endAiChat()tears down jobs when user aborts.
Snippets
kotlin
binding.btnAiChat.setOnClickListener {
GlassSdk.getGlassAiChatService()?.startAiChat(false)
GlassSdk.getGlassAiChatService()?.toAiChat(
"Will it rain in Hangzhou tomorrow?",
mAIChaLister
)
}
binding.btnStopAiChat.setOnClickListener {
GlassSdk.getGlassAiChatService()?.endAiChat()
}kotlin
private val mAIChaLister = object : AiChatListener.Stub() {
override fun onAiChatAnswer(
answer: String?,
isFinish: Boolean,
contentType: String?,
sessionId: String?
) {
L.i(TAG, "onAiChatAnswer: answer = $answer")
}
override fun onError(code: Int, message: String) {}
}Callback matrix handled
onContinuousModeUpdate(...)onAiChatAnswer(answer, isFinish, contentType, sessionId)onError(code, message)onAiTakePhoto(filePath)
Sequence
mermaid
sequenceDiagram
participant UI as Glass UI
participant AI as AI Chat Service
UI->>AI: startAiChat(false)
UI->>AI: toAiChat(prompt, listener)
AI-->>UI: onAiChatAnswer(chunk, isFinish=false)
AI-->>UI: onAiChatAnswer(chunk, isFinish=false)
AI-->>UI: onAiChatAnswer(chunk, isFinish=true)
UI->>AI: endAiChat()FAQs
Why isFinish exists
Answers stream chunk-by-chunk — answer deltas arrive until isFinish asserts completion for that turn.
onAiTakePhoto
Signals device-action intents (e.g. capture) beyond pure texting—helps design assistant scenarios.
sessionId
Log correlation + future multi-turn context—persist for production analytics.
Voice stack integration
Typical storyboard:
- ASR → user text
- AI Chat → reasoning / answer
- TTS → audible reply
Samples currently split these across pages but you can unify them in one state machine.
Suggested composition
| Stage | Capability | Sample reference |
|---|---|---|
| Input | Cloud ASR | SendMessageActivity |
| Reasoning | AI Chat | SdkMediaActivity |
| Output | TTS | SendMessageActivity |
Caveats
- Demo focuses on wiring, not final chat UI.
- Production assistants should orchestrate ASR + AI + TTS lifecycle in one cohesive controller layer.