阅读

“阅读”是 Android 设备上提供的 Google 助手功能,它为用户提供了一种阅读长篇网页内容(如新闻文章和博文)的另一种方式。用户可以说类似“嘿 Google,阅读它”之类的话,让应用大声朗读网页内容,突出显示正在朗读的文字,并自动滚动页面。要详细了解此功能,您还可以阅读“阅读”产品更新文章

When prompted, an app reads web content on the screen out loud with
            the help of the Google Assistant.
图 1. 聆听应用大声朗读网页内容。

包含网页内容的 Android 应用可以通过使用onProvideAssistContent()方法为助手提供信息来支持“阅读”。

此过程有助于在与助手共享数据时保持数据的结构。接收共享应用内容的用户随后可以进行深度链接或直接接收内容,而不是以文本或屏幕截图的形式接收。

为应用中的任何网页内容和任何可共享的实体实现onProvideAssistContent()

向助手提供内容

为了让“阅读”能够访问您的内容,您的应用必须向助手提供有关内容的信息,例如其网页 URI 和一些基本上下文。然后,助手可以检索您的内容,以便大声朗读给用户。

对于已使用 WebView 或 Chrome 自定义标签实现网页内容的 Android 应用,请使用相同的网页 URI 作为“阅读”的起点。

将“阅读”功能与内置意图结合使用时,您只需要为用户在调用应用操作后任务流中的最终应用活动实现onProvideAssistContent()

例如,如果您的应用显示新闻文章,请在显示文章的最终屏幕中实现onProvideAssistContent();您无需为任何进行中或预览屏幕实现它。

AssistContenturi字段中提供内容的网页 URI。在structuredData字段中提供作为JSON-LD对象使用 schema.org 词汇的上下文信息。

以下代码片段显示了向助手提供内容的示例

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()时,尽可能多地提供有关每个实体的数据。以下字段是必需的

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

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