開発者コンソール

手順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;
    }
}
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は、クラスとして作成するだけでなく、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: 最初のチャンネルを挿入するに進みます。


Last updated: 2022年8月12日