rk
2026-04-10 56bc142d33106db9f226abe39f60d0059d702338
app/pages/index/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
<template>
   <view style="padding: 40rpx;">
      <button @click="speak('订单已收到,开始播报')">开始播报</button>
   </view>
</template>
<script>
   export default {
      data() {
         return {
            tts: null // åŽŸç”ŸTTS对象
         }
      },
      onReady() {
         this.initTTS() // é¡µé¢æ¸²æŸ“完成初始化语音
      },
      methods: {
         // ========== åˆå§‹åŒ–安卓原生语音 ==========
         initTTS() {
            if (uni.getSystemInfoSync().platform !== 'android') {
               console.log('仅支持安卓')
               return
            }
            try {
               // å¯¼å…¥å®‰å“原生类
               const TextToSpeech = plus.android.importClass('android.speech.tts.TextToSpeech')
               const Locale = plus.android.importClass('java.util.Locale')
               // åˆ›å»ºTTS
               this.tts = new TextToSpeech(plus.android.runtimeMainActivity(), {
                  onInit: (status) => {
                     if (status == 0) {
                        // è®¾ç½®ä¸­æ–‡
                        this.tts.setLanguage(Locale.CHINA)
                        console.log('语音初始化成功')
                     }
                  }
               })
            } catch (e) {
               console.log('初始化失败', e)
            }
         },
         // ========== è¯­éŸ³æ’­æŠ¥ï¼ˆæ ¸å¿ƒæ–¹æ³•) ==========
         speak(text) {
            if (!this.tts) {
               uni.showToast({
                  title: '语音未准备好',
                  icon: 'none'
               })
               return
            }
            try {
               // å®‰å“原生播报(QUEUE_FLUSH = ç«‹å³æ’­æŠ¥ï¼Œæ‰“断上一条)
               this.tts.speak(text, 0, null)
            } catch (err) {
               console.log('播报失败', err)
            }
         },
         // åœæ­¢æ’­æŠ¥
         stopSpeak() {
            if (this.tts) this.tts.stop()
         }
      },
      // é¡µé¢é”€æ¯æ—¶å…³é—­è¯­éŸ³
      onUnload() {
         if (this.tts) {
            this.tts.stop()
            this.tts.shutdown()
         }
      }
   }
</script>