HarmonyOS 鸿蒙Next中TextReader.showPanel()

HarmonyOS 鸿蒙Next中TextReader.showPanel() cke_221.jpg

执行TextReader.showPanel()方法,为什么同一部手机,点击播放-人像,官方声音列表中。

有的app中官方声音选择中,头像是灰色的不能选择声音,有的只包含女声;有的包含女声、男声;是什么原因导致的?应该怎么设置才能显示统一。


更多关于HarmonyOS 鸿蒙Next中TextReader.showPanel()的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

男声首次使用是需要联网进行下载对应的资源的,并且还需要给予以下两个权限才会出现选项。

在控件使用功能时切换音色,需要在module.json5配置文件中添加 ohos.permission.INTERNET 和 ohos.permission.GET_NETWORK_INFO 权限,确保朗读控件可以正常切换音色。

// module.json5
{
  "module": {
    // ...
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "reason": "$string:reason",
        "usedScene": {"abilities": []}
      },
      {
        "name": "ohos.permission.GET_NETWORK_INFO",
        "reason": "$string:reason",
        "usedScene": {"abilities": []}
      },
    ],
  }
}

更多关于HarmonyOS 鸿蒙Next中TextReader.showPanel()的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,TextReader.showPanel() 用于显示文本阅读器的控制面板。该API属于@ohos.textReader模块,通常与TextReader实例配合使用,以展示播放、暂停、进度条等交互控件。调用此方法前需确保已正确创建并初始化TextReader对象。

在HarmonyOS Next中,TextReader.showPanel() 显示的官方声音列表内容差异,主要取决于应用在声明权限配置TTS引擎时的具体方式。

核心原因是:不同的应用配置,会筛选出不同能力的系统TTS(文本转语音)服务,从而导致面板中可用的声音列表不同。

以下是具体原因和解决方案:

原因分析

  1. 权限声明差异

    • 如果应用在 module.json5 配置文件中声明了 ohos.permission.INTERNET(网络权限),TextReader 将尝试获取支持在线语音合成的TTS引擎服务。这类引擎通常提供更丰富的声音(如多种男声、女声、音色),但部分高质量声音可能需要从云端加载,在未登录或网络不可用时,对应的头像/声音选项可能显示为灰色不可用。
    • 如果应用未声明网络权限,则 TextReader 仅会调用设备本地内置的TTS引擎。本地引擎通常只包含有限的基础声音(例如仅一种女声),因此面板中选项较少。
  2. TTS引擎配置与可用性

    • 系统可能预置或用户安装了多个TTS引擎(如华为语音引擎、或其他第三方引擎)。不同引擎提供的声音库不同。
    • TextReader 面板会展示当前默认引擎或所有可用引擎的声音列表。如果某个声音对应的语音数据包未下载或引擎不支持,该选项就会显示为灰色。

如何设置以统一显示

要确保你的应用能触发显示最完整的官方声音列表(尤其是在华为设备上),请按以下步骤检查和配置:

  1. 声明必要的权限: 在您的应用项目的 module.json5 文件中进行声明。

    {
      "module": {
        // ... 其他配置
        "requestPermissions": [
          {
            "name": "ohos.permission.INTERNET"
          }
        ]
      }
    }
    

    这允许TTS服务访问在线资源,获取更全的声音列表。

  2. 在代码中动态检查并请求权限: 在调用 TextReader.showPanel() 之前,确保应用已被授予网络权限。这可以通过 abilityAccessCtrl 相关API实现。

  3. 确保系统TTS服务正常

    • 引导用户进入“设置 > 辅助功能 > 文本转语音”,检查并确保:
      • “首选引擎”已设置为“华为语音引擎”(或提供丰富声音的引擎)。
      • 在引擎设置中,点击“声音列表”或类似选项,确保所需的声音(如男声、特定女声)已下载并处于可用状态。
    • 应用无法强制用户下载声音,但可以检测声音是否可用。你可以通过 TextReader.getVoiceList() 方法先获取当前可用的声音列表,再决定是否展示面板或给出提示。
  4. 调用时机考虑: 确保在应用UI线程稳定、且系统服务已就绪后调用 showPanel() 方法。避免在应用启动初始阶段或后台服务中调用,以免因引擎初始化未完成导致列表不全。

总结

出现差异的直接原因是应用权限配置触发了不同的TTS服务筛选路径,根本原因是用户设备上TTS引擎本身的声音包安装状态不同

要最大化保证一致性,你的应用应:

  • 声明网络权限
  • 在用户交互后调用 showPanel()
  • 在应用说明中提示用户,如需更多声音选项,需在系统设置中确保TTS引擎和声音包已就绪。

通过以上配置,你的应用将尽可能触发系统展示最完整的、包含在线声音的列表,与其他显示完整的应用行为保持一致。

回到顶部