Explorar o código

2025年9月10日basic更新:
1、新增ContextHelper类,可以在除EntryAbility以外的任意地方获取context,UIContext,abilityContext。
2、修复了我的页面的部分bug 如输入密码后无法验证码登录 上传大图片会导致闪退等。
3、新增可拖动的悬浮窗FloatingComp组件
4、新增注册字体工具类 可调用registerFont方法快速注册字体
5、更新了YTPhotoHelper类 新增传入组件id即可截图保存至相册,压缩图片的方法
6、更新了YTButton,使其可以传入渐变色 新增节流功能,使用YTButton则不需要考虑节流问题,但需要快速点击的场景不建议使用。
7、更新了YTRequest方法,将入参默认设置为any类型。
8、更新了YTToast方法,使其可以通过key值获取多例,解决了某些需要多个弹窗的场景。

wangcy hai 1 mes
pai
achega
2c83368a51

+ 1 - 1
commons/basic/src/main/ets/apis/YTUserRequest.ets

@@ -179,7 +179,7 @@ export class YTUserRequest extends YTRequest {
   static questionBack(des: string, createBy: string) {
     YTUserRequest.post<null, ReqString>(`/warehouseBack/saveQuestion`, {
       'backQuestion': des,
-      'createBy': createBy,
+      'mobile': createBy,
       'createTime': new YTDate().formatDate('-', true),
     })
       .then(() => {

+ 207 - 0
features/feature/src/main/ets/view/SecondView.ets

@@ -1,7 +1,214 @@
+import { textToSpeech } from '@kit.CoreSpeechKit';
+import { BusinessError } from '@kit.BasicServicesKit';
+
+let ttsEngine: textToSpeech.TextToSpeechEngine;
+
 
 @Component
 export struct SecondView {
+  @State createCount: number = 0;
+  @State voiceInfo: string = "";
+  @State originalText: string = "支付宝到账[n2]1000000元";
+
   build() {
+    Column() {
+      Scroll() {
+        Column() {
+          TextArea({ placeholder: 'Please enter tts original text', text: `${this.originalText}` })
+            .margin(20)
+            .border({
+              width: 5,
+              color: 0x317AE7,
+              radius: 10,
+              style: BorderStyle.Solid
+            })
+            .onChange((value: string) => {
+              this.originalText = value;
+              console.info(`original text: ${this.originalText}`);
+            })
+          Button() {
+            Text("CreateEngineByCallback")
+              .fontColor(Color.White)
+              .fontSize(20)
+          }
+          .type(ButtonType.Capsule)
+          .backgroundColor("#0x317AE7")
+          .width("80%")
+          .height(50)
+          .margin(10)
+          .onClick(() => {
+            this.createCount++;
+            console.info(`CreateTtsEngine:createCount:${this.createCount}`);
+            this.createByCallback();
+          })
+
+          Button() {
+            Text("speak")
+              .fontColor(Color.White)
+              .fontSize(20)
+          }
+          .type(ButtonType.Capsule)
+          .backgroundColor("#0x317AE7")
+          .width("80%")
+          .height(50)
+          .margin(10)
+          .onClick(() => {
+            this.createCount++;
+            this.speak();
+          })
+
+          Button() {
+            Text("listVoicesCallback")
+              .fontColor(Color.White)
+              .fontSize(20)
+          }
+          .type(ButtonType.Capsule)
+          .backgroundColor("#0x317AE7")
+          .width("80%")
+          .height(50)
+          .margin(10)
+          .onClick(() => {
+            this.listVoicesCallback();
+          })
 
+          Button() {
+            Text("stop")
+              .fontColor(Color.White)
+              .fontSize(20)
+          }
+          .type(ButtonType.Capsule)
+          .backgroundColor("#0x317AE7")
+          .width("80%")
+          .height(50)
+          .margin(10)
+          .onClick(() => {
+            // 停止播报
+            console.info("Stop button clicked.");
+            ttsEngine.stop();
+          })
+
+          Button() {
+            Text("isBusy")
+              .fontColor(Color.White)
+              .fontSize(20)
+          }
+          .type(ButtonType.Capsule)
+          .backgroundColor("#0x317AE7")
+          .width("80%")
+          .height(50)
+          .margin(10)
+          .onClick(() => {
+            // 查询播报状态
+            let isBusy = ttsEngine.isBusy();
+            console.info(`isBusy: ${isBusy}`);
+          })
+
+          Button() {
+            Text("shutdown")
+              .fontColor(Color.White)
+              .fontSize(20)
+          }
+          .type(ButtonType.Capsule)
+          .backgroundColor("#0x317AA7")
+          .width("80%")
+          .height(50)
+          .margin(10)
+          .onClick(() => {
+            // 释放引擎
+            ttsEngine.shutdown();
+          })
+        }
+        .layoutWeight(1)
+      }
+      .width('100%')
+      .height('100%')
+    }
   }
+
+  // 创建引擎,通过callback形式返回
+  private createByCallback() {
+    // 设置创建引擎参数
+    let extraParam: Record<string, Object> = { "style": 'interaction-broadcast', "locate": 'CN', "name": 'EngineName' };
+    let initParamsInfo: textToSpeech.CreateEngineParams = {
+      language: 'zh-CN',
+      person: 0,
+      online: 1,
+      extraParams: extraParam
+    };
+    // 调用createEngine方法
+    textToSpeech.createEngine(initParamsInfo,
+      (err: BusinessError, textToSpeechEngine: textToSpeech.TextToSpeechEngine) => {
+        if (!err) {
+          console.info('Succeeded in creating engine.');
+          // 接收创建引擎的实例
+          ttsEngine = textToSpeechEngine;
+        } else {
+          console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
+        }
+      });
+  };
+
+  // 调用speak播报方法
+  private speak() {
+    let speakListener: textToSpeech.SpeakListener = {
+      // 开始播报回调
+      onStart(requestId: string, response: textToSpeech.StartResponse) {
+        console.info(`onStart, requestId: ${requestId} response: ${JSON.stringify(response)}`);
+      },
+      // 完成播报回调
+      onComplete(requestId: string, response: textToSpeech.CompleteResponse) {
+        console.info(`onComplete, requestId: ${requestId} response: ${JSON.stringify(response)}`);
+      },
+      // 停止播报完成回调,调用stop方法并完成时会触发此回调
+      onStop(requestId: string, response: textToSpeech.StopResponse) {
+        console.info(`onStop, requestId: ${requestId} response: ${JSON.stringify(response)}`);
+      },
+      // 返回音频流
+      onData(requestId: string, audio: ArrayBuffer, response: textToSpeech.SynthesisResponse) {
+        console.info(`onData, requestId: ${requestId} sequence: ${JSON.stringify(response)} audio: ${JSON.stringify(audio)}`);
+      },
+      // 错误回调,播报过程发生错误时触发此回调
+      onError(requestId: string, errorCode: number, errorMessage: string) {
+        console.error(`onError, requestId: ${requestId} errorCode: ${errorCode} errorMessage: ${errorMessage}`);
+      }
+    };
+    // 设置回调
+    ttsEngine.setListener(speakListener);
+    // 设置播报相关参数
+    let extraParam: Record<string, Object> = {
+      "queueMode": 0,
+      "speed": 1,
+      "volume": 2,
+      "pitch": 1,
+      "languageContext": 'zh-CN',
+      "audioType": "pcm",
+      "soundChannel": 3,
+      "playType": 1
+    }
+    let speakParams: textToSpeech.SpeakParams = {
+      requestId: '123456-a', // requestId在同一实例内仅能用一次,请勿重复设置
+      extraParams: extraParam
+    };
+    // 调用speak播报方法
+    ttsEngine.speak(this.originalText, speakParams);
+  };
+
+  // 查询语种音色信息,以callback形式返回
+  private listVoicesCallback() {
+    // 设置查询相关参数
+    let voicesQuery: textToSpeech.VoiceQuery = {
+      requestId: '123456-b', // requestId在同一实例内仅能用一次,请勿重复设置
+      online: 1
+    };
+    // 调用listVoices方法,以callback返回语种音色查询结果
+    ttsEngine.listVoices(voicesQuery, (err: BusinessError, voiceInfo: textToSpeech.VoiceInfo[]) => {
+      if (!err) {
+        // 接收目前支持的语种音色等信息
+        this.voiceInfo = JSON.stringify(voiceInfo);
+        console.info(`Succeeded in listing voices, voiceInfo is ${voiceInfo}`);
+      } else {
+        console.error(`Failed to list voices. Code: ${err.code}, message: ${err.message}`);
+      }
+    });
+  };
 }