diff --git a/android/src/services/wakeword.ts b/android/src/services/wakeword.ts index 17ed71e..5d32f1f 100644 --- a/android/src/services/wakeword.ts +++ b/android/src/services/wakeword.ts @@ -263,15 +263,16 @@ class WakeWordService { return; } this.setState('conversing'); + // Direkt feuern — KEIN setTimeout. Im Hintergrund (Display aus) parkt + // Android den JS-Thread; ein setTimeout(200ms) kann dann Minuten lang + // nicht zuendekommen, weil Hermes auf einen Native-Wake-Event wartet. + // OpenWakeWord.stop() oben ist awaited → Mikro ist schon frei, kein + // 200ms-Sicherheitsabstand noetig. import('./logger').then(m => m.reportAppDebug('wake.detect', - `state→conversing, wakeCallbacks.length=${this.wakeCallbacks.length}, scheduling 200ms timeout`)).catch(()=>{}); - setTimeout(() => { - import('./logger').then(m => m.reportAppDebug('wake.detect', - `timeout fired, state=${this.state}, cbs=${this.wakeCallbacks.length}`)).catch(()=>{}); - if (this.state === 'conversing') { - this.wakeCallbacks.forEach(cb => cb()); - } - }, 200); + `state→conversing, firing ${this.wakeCallbacks.length} callback(s) directly`)).catch(()=>{}); + this.wakeCallbacks.forEach(cb => { + try { cb(); } catch (e) { console.warn('[WakeWord] wake cb err:', e); } + }); } /** Wake-Word PARALLEL zur TTS-Wiedergabe lauschen lassen — User kann