读一读

“读一读”是 Android 设备上的一项 Google 助理功能,为用户提供了另一种方式来阅读新闻报道和博文等长篇幅 Web 内容。用户可以说出类似“Hey Google, read it”之类的指令,让应用朗读基于网络的内容,突出显示要朗读的字词,以及自动滚动页面。如需详细了解此功能,您还可以参阅有关“读一读”功能产品最新动态的博文

收到提示后,应用即会借助 Google 助理朗读屏幕上显示的 Web 内容。
图 1. 让应用朗读 Web 内容。

如果 Android 应用具有基于网络的内容,则可通过使用 onProvideAssistContent() 方法向 Google 助理提供信息来支持“读一读”功能。

此过程有助于在与 Google 助理分享数据时保持数据的结构。然后,收到分享的应用内容的用户就可以打开相应的深层链接或直接接收内容,而不是接收文本或屏幕截图。

为应用中所有基于网络的内容以及所有可分享的 entity 实现 onProvideAssistContent()

向 Google 助理提供内容

若要让“读一读”功能访问您的内容,您的应用必须向 Google 助理提供该内容的相关信息,例如其网页 URI 和一些基本上下文。然后,Google 助理可检索您的内容,以便为用户朗读该内容。

对于已经使用 WebView 或 Chrome 自定义标签页实现基于网络的内容的 Android 应用,请先从为“读一读”功能使用相同的网页 URI 着手。

将“读一读”功能与内置 intent 结合使用时,您只需在调用与应用有关的 Action 后,为用户任务流中的最终应用 activity 实现 onProvideAssistContent() 即可。

例如,如果您的应用会显示新闻报道,那么只需在显示该报道的最后一个屏幕中实现 onProvideAssistContent();而不必为任何进行中的屏幕或预览屏幕实现此方法。

AssistContenturi 字段中提供相应内容的网页 URI。在 structuredData 字段中使用 schema.org 词汇表,以 JSON-LD 对象的形式提供上下文信息。

以下代码段举例说明了如何向 Google 助理提供内容:

Kotlin

override fun onProvideAssistContent(outContent: AssistContent) {
    super.onProvideAssistContent(outContent)

    // Set the web URI for content to be read from a
    // WebView, Chrome Custom Tab, or other source
    val urlString = url.toString()
    outContent.setWebUri(Uri.parse(urlString))

    // Create JSON-LD object based on schema.org structured data
    val structuredData = JSONObject()
        .put("@type", "Article")
        .put("name", "ExampleName of blog post")
        .put("url", outContent.getWebUri())
        .toString()
    outContent.setStructuredData(structuredData)
}

Java

@Override
public void onProvideAssistContent(AssistContent outContent) {

  // Set the web URI for content to be read from a
  // WebView, Chrome Custom Tab, or other source
  String urlString = url.toString();
  outContent.setWebUri(Uri.parse(urlString));

  try {
      // Create JSON-LD object based on schema.org structured data
      String structuredData = new JSONObject()
          .put("@type", "Article")
          .put("name", "ExampleName of blog post")
          .put("url", outContent.getWebUri())
          .toString();
      outContent.setStructuredData(structuredData);
  } catch (JSONException ex) {
      // Handle exception
      Log.e(TAG, ex.getMessage());
  }

  super.onProvideAssistContent(outContent);
}

实现 onProvideAssistContent() 时,请尽可能多地提供有关每个 entity 的数据。以下字段是必填字段:

  • @type
  • .name
  • .url(仅当内容可通过网址寻址时才需填写)

如需详细了解如何使用 onProvideAssistContent(),请参阅 Android 开发者文档中的优化 Google 助理的上下文内容指南。