手順2: TvInputServiceをセットアップする
次はTvInputService
をセットアップします。コードが正常にコンパイルされインストールされるためには、このページ内のコードをすべて実装してください。
- 最小限の
TvInputService
の作成 - 入力サービスのリソースXMLファイルの定義
- マニフェストでのTV入力サービスの宣言
- SetupActivityの定義
- チェックポイント - [チャンネル提供元を同期] での入力名の表示
- トラブルシューティング
- 次のステップ
最小限の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" />
com.example.android.sampletvinput
の部分には、必ず独自のパスを使用してください。重要な情報
アクティビティ | 必須・任意 | 備考 |
---|---|---|
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>
チェックポイント - [チャンネル提供元を同期] での入力名の表示
以下の手順に従って、ここまでの手順がすべて正しく行われていることを確認します。
- APKをビルドしてFire TVにインストールします。
- ADBへの接続手順
- ADBにアプリをインストールして実行する方法
- または、Android Studioを使用して実行することもできます。下の画像を参照してください。
- [設定] > [ライブTV] > [チャンネル提供元を同期] の順に選択します。
- 入力名がメニューに表示されます。
- メニューで該当する名前をクリックします。
- SetupActivityが起動されます。

Android Studioから実行およびインストールする場合は、デバイスセクションにFire TVのオプションが表示されます。
トラブルシューティング
[チャンネル提供元を同期] にアプリが表示されない
デバイスログの取得
adb logcat | grep "LiveTvSettings\|TIFUtils"
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のログを検索します。
adb logcat | grep ProviderRegistry
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: 最初のチャンネルを挿入するに進みます。