開発者コンソール

手順2: TvInputServiceをセットアップする


手順2: TvInputServiceをセットアップする

次はTvInputServiceをセットアップします。コードを正常にコンパイルしてインストールするには、このページ内のコードをすべて実装してから実行するようにしてください。

最小限のTvInputServiceの作成

TvInputServiceを拡張したAndroidのサービスクラスを作成します。

TvInputServiceの最小限の実装例:

package  com.example.android.sampletvinput;// 実際のパッケージに置き換えます

import android.media.tv.TvInputService;

public class RichTvInputService extends TvInputService {
    @Override
    public Session onCreateSession(String inputId) {
        return null;
    }
}

入力サービスのリソースXMLファイルの定義

各入力サービスには、共通の入力属性を定義するリソースXMLファイルが必要です。以下はこのようなファイルの例を示しています。これは、res/xml/richtvinputservice.xmlにあります。

<?xml version="1.0" encoding="utf-8"?>
<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.android.sampletvinput.SetupActivity" />

重要な情報

アクティビティ 必須・任意 備考
android:setupActivity 必須 ユーザーが [設定] > [ライブTV] > [チャンネル提供元を同期] の順に選択し、該当する入力名を選択すると起動されます。

マニフェストでのTV入力サービスの宣言

AndroidManifest.xmlのapplicationセクションでのTvInputServiceの例:

<service
    android:name=".RichTvInputService"
   android:label="My Input Name"
    android:permission="android.permission.BIND_TV_INPUT">
 
    <!-- アカウントサービスを起動するためにシステムで使用される必須フィルター。 -->
        <intent-filter>
            <action android:name="android.media.tv.TvInputService" />
        </intent-filter>
    <!--
   この入力を説明するXMLファイル。 これにより、SetupActivityへのポインターが
    システム/TVアプリに提供されます。
   -->
    <meta-data
        android:name="android.media.tv.input"
        android:resource="@xml/richtvinputservice" />
</service>

重要な情報

アクティビティ 必須・任意 入力 備考
android:label 必須 "My Input Name" ここに独自のサービス名を入力します。
android:permission 必須 "android.permission.BIND_TV_INPUT" サービスがTV入力をシステムに接続できるようにするためのAndroidパーミッションを指定します。
<intent-filter> 必須 <action> サービスを起動するためにシステムで使用されるフィルターです。
android:name 必須 "android.media.tv.input" Androidでサービスが正しく認識されるよう、正しい名前を指定する必要があります。リソースは、以下に定義する構造化されたXMLファイルを指すようにしてください。

SetupActivityの定義

アプリにロジックを追加するには、SetupActivityクラスを追加する必要があります。このクラスは必要に応じて呼び出します。アクティビティを呼び出すSetupActivityクラスの例を以下に示します。

import android.app.Activity;
import android.os.Bundle;

public class SetupActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rich_setup); // rich_setup.xmlを作成します
    }
}

SetupActivityは、クラスとしてだけでなく、AndroidManifestのXMLファイル(以下を参照)でも作成する必要があります。

rich_setupというXMLファイルを作成して、そこでレイアウトを定義します。レイアウトフォルダ内のrich_setup.xmlの例を以下に示します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
</LinearLayout>

AndroidManifestでのSetupActivityの例:

<activity android:name=".SetupActivity" >
 <intent-filter>
        <action android:name="android.intent.action.MAIN" />
 </intent-filter>
</activity>

チェックポイント - [チャンネル提供元を同期] での入力名の表示

以下の手順に従って、ここまでの手順がすべて正しく行われていることを確認します。

  1. APKをビルドしてFire TVにインストールします。
  2. [設定] > [ライブTV] > [チャンネル提供元を同期] の順に選択します。
  3. 入力名がメニューに表示されます。
  4. メニューで該当する名前をクリックします。
  5. SetupActivityが起動されます。
Android Studioがデバイスに接続されている場合の表示内容

Android Studioから実行およびインストールする場合は、デバイスセクションにFire TVのオプションが表示されます。

トラブルシューティング

[チャンネル提供元を同期] にアプリが表示されない

デバイスログの取得

デバイスログの取得(LinuxまたはMac):
adb logcat | grep "LiveTvSettings\|TIFUtils"
デバイスログの取得(Windows):
adb logcat | findstr "LiveTvSettings/|TIFUtils"

以下のように表示される場合:

TIFUtils: <アプリ> is not a configurable input.Removing from input list
LiveTvSettings: TvInput(s) found: .... <アプリに含まれていないTvInput>

TvInputServiceが正しく定義されていない可能性があります。この問題を解決するには、以下を確認します。

  • Fire TVデバイスが最新のソフトウェアにアップデートされているか。
    • [設定] > [My Fire TV] > [バージョン情報] > [アップデートをチェック] の順に選択して、必要に応じてアップデートします。
  • InputServiceでパーミッションが正しく指定されているか。
  • InputServiceでインテントフィルターが正しく宣言されているか。
  • InputServiceでメタデータが正しく定義されているか。
  • InputServiceのメタデータが正しいXMLリソースにリンクされているか。
  • XMLリソースでSetupActivityが定義されているか。 SetupActivityが有効であるか。

上記のすべてを試しても問題が解決しない

  • ターミナルを開き、ProviderRegistryでログを検索します。
ProviderRegistryログ(LinuxまたはMac):
adb logcat | grep ProviderRegistry
ProviderRegistryログ(Windows):
adb logcat | findstr ProviderRegistry
  • Fire TVで次の手順を実行します。
    • [設定] > [マイアカウント] > [Amazonコンテンツを同期] の順に選択します。
    • 数秒後に次のようなログが表示されます。
08-06 17:09:05.684   694   757 I ProviderRegistry: No change for InstalledProvider(configuration=ProviderConfiguration(packageName=com.example.android.sampletvinput, logoId=1254252374292, rowId=null, defaultRank=1, defaultSortOrder=NONE, showBroadcastRatingsFlag=false, tvInputsSupported=false, qualifierId=, supportedContent=[LINEAR], eventRowId=null, featureBlacklist=[], userProviderPreference=UserProviderPreference(mProviderId=, mRank=2147483647, mSortOrder=NONE), stationCount=4)
  • ログでアプリ名がInstalledProviderとして表示されない場合は、許可リストに正しく登録されていません。パッケージ名は、許可リストへの登録用に申請したものと同じである必要があります。デバッグ用のパッケージ名と本番用のパッケージ名を許可リストに追加するには、Amazonの担当者に連絡してください。

次のステップ

次の 手順3: 最初のチャンネルを挿入するに進みます。