検索機能を実装する


検索機能を実装する

Amazon Fire TVに検索機能を実装するには、テキスト検索と音声検索の主な違いを理解する必要があります。

アプリ内のテキスト検索

アプリにおけるテキスト検索とは、アプリ内に明示的にコーディングしたテキスト検索機能のことです。デフォルトでは、アプリのテキスト検索をAmazon Fire TVで実行することはできません。

Amazon Fire TVには、Fire TVのホーム画面で実行できるグローバルテキスト検索機能が用意されています。グローバルテキスト検索では、Amazonカタログから結果が返されます。グローバルテキスト検索の結果にメディアを表示するには、Amazonカタログにアプリのメディアを組み込む必要があります。

音声検索

Amazon Fire TVには、音声対応リモコンを使用した音声機能も用意されています。Fire TVのAlexa音声機能に加え、自然言語を使用することで、テレビ番組、映画、そのほかのメディアを検索することができます。

Fire TVで表示している画面にかかわらず、音声対応リモコンのマイクボタンを押して目的のテレビ番組やAlexaアクションを声に出して言うと、LeanbackライブラリではなくAlexaクラウドサービスを使用してグローバル検索が開始されます。

音声によるメディアリクエストでは、常にAmazonカタログのコンテンツが返されます。これらの結果にアプリのメディアを表示するには、Amazonカタログにアプリのメディアを組み込む必要があります。

ユーザーがアプリを既にインストールしている場合、アプリのコンテンツはカタログの結果に直接表示されます。ユーザーがアプリをインストールしていない場合は、[その他の視聴方法] オプションが表示されます。ユーザーはこのオプションを使用して、アプリを取得し、そのコンテンツを表示できます(カタログ統合は、どのユーザーにも同じコンテンツが提供されるアプリでのみ推奨されるオプションです)。

Leanbackの音声認識エラーの回避

Amazon Fire TVの音声操作にはAlexaが使用されるため、LeanbackライブラリのSearchFragmentクラスによる音声認識はFire TVアプリに対して無効にしておく必要があります。音声認識を無効にしないと、ユーザーが検索を実行したときにアプリがエラーを返す可能性があります。

LeanbackのSearchFragmentクラスでは、startActivityForResultメソッドによって音声認識方法が検索されます。FireTVではこの音声認識機能がサポートされていないため、エラーが生成されます。エラーを回避するには、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のスキルでアプリを制御する方法はありません。