实施搜索


实施搜索

在 Amazon Fire TV 中实现搜索要求您了解文本搜索和语音搜索之间的一些主要区别。

应用中的文本搜索

应用中的文本搜索是指您在应用中专门编码的任何特定于文本的搜索功能。默认情况下,您的应用的文本搜索在 Amazon Fire TV 上不可用。

Amazon Fire TV 提供可从 Fire TV 主屏幕使用的全局文本搜索功能。全局文本搜索将返回 Amazon Catalog 中的结果。要使您的媒体出现在全局文本搜索结果中,您必须将应用的媒体集成到 Amazon Catalog 中

语音搜索

Amazon Fire TV 还通过支持语音的遥控器提供语音功能。除了 Fire TV 上的 Alexa 语音功能外,用户还可以使用自然语言来搜索电视节目、电影和其他媒体。

无论用户在 Fire TV 上的哪个位置,当他们按下支持语音的遥控器上的麦克风按钮并说出他们想要的电视节目或 Alexa 操作时,此操作都会使用 Alexa 云服务而不是使用 Leanback 库来启动全局搜索。

通过语音进行的媒体请求始终返回 Amazon Catalog 中的内容。如果您希望应用的媒体出现在这些结果中,则必须将应用的媒体集成到 Amazon Catalog 中

如果用户已安装您的应用,则应用的内容可以直接显示在目录结果中。如果用户没有您的应用,则会显示“更多观看方式”选项,用户可以获取您的应用并查看内容。(请注意,仅建议将目录集成作为内容对所有客户都相同的应用的选项。)

避免 Leanback 出现语音识别错误

由于使用 Alexa(而不是 Leanback 库)实现 Amazon Fire TV 上的语音交互性,因此您必须对 Fire TV 应用禁用使用 Leanback 库的 SearchFragment 类的任何语音识别。如果您不禁用语音识别,您的应用可能会在用户执行搜索时返回错误。

在 Leanback 的 SearchFragment 类中,startActivityForResult 方法查找语音识别器。由于 FiretV 不支持此语音识别器,因此此操作会产生错误。为避免错误,请覆盖 onCreate() 方法并注释掉语音识别回调,以免该方法执行。示例如下:

setSpeechRecognitionCallback(() -> {
    if (DEBUG) Log.v(TAG, "recognizeSpeech");
    try {
        //startActivityForResult(getRecognizerIntent(), REQUEST_SPEECH);
    }
    catch (ActivityNotFoundException e) {
        Log.e(TAG, "Cannot find activity for speech recognizer", e);
    }

在这里,startActivityForResult 方法直接被注释掉,因此语音识别功能将不会执行,也不会产生错误。

Alexa 技能和应用

您无法创建特定于您的应用的 Alexa 支持的语音搜索,以便只从您的应用返回媒体结果。您可以在 Fire TV 上访问任何 Alexa 技能,但这些技能只是语音体验。语音技能不会与 Fire TV 上的原生应用交互。因此,您创建的 Alexa 技能无法控制应用。