開発者コンソール

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

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

次は、ストリーミングメディアソースを表すTvInputServiceをセットアップします。TV入力サービスにより、ペアレンタルコントロール、番組表情報、コンテンツレーティングを提供できます。コードを正しくコンパイルしてインストールするには、このページのコードをすべて実装する必要があります。

最小限の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;
    }
}
package com.example.android.sampletvinput // 実際のパッケージに置き換えます

import android.media.tv.TvInputService

class RichTvInputService : TvInputService() {
    override fun onCreateSession(inputId: String): Session? {
        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ファイル。これにより、システム/TVアプリに
    SetupActivityへのポインターが提供されます。
   -->
    <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を作成します
    }
}
import android.app.Activity
import android.os.Bundle
import com.example.android.sampletvinput.R

class SetupActivity : Activity() {
    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.rich_setup) // rich_setup.xmlを作成する必要があります
    }
}

SetupActivityをクラスとして作成し、次のコードに示すように、AndroidマニフェストXMLファイルにアクティビティを追加します。

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

rich_setupというXMLファイルを作成して、そこでレイアウトを定義します。以下は、layoutフォルダ内の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>

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

次の手順を使用して、設定を検証します。

  1. APKをビルドしてFire TVにインストールします。
  2. [設定] > [ライブTV] > [チャンネル提供元を同期] に移動します。
  3. メニューに入力名が表示されます。
  4. メニューで該当する名前をクリックします。

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の担当者に連絡してください。



Last updated: 2025年2月6日

DevAssistant