开发人员控制台

实现搜索功能


实现搜索功能

在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中

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

避免Leanback出现语音识别错误

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

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

setSpeechRecognitionCallback(() -> {
    if (DEBUG) Log.v(TAG, "recognizeSpeech");
    try {
        //startActivityForResult(getRecognizerIntent(), REQUEST_SPEECH);
    }
    catch (ActivityNotFoundException e) {
        Log.e(TAG, "找不到语音识别器的活动", e);
    }

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

Alexa技能和应用

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