手順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;
}
}
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" />
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ファイル。これにより、システム/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>
チェックポイント - [チャンネル提供元を同期] での入力名の表示
以下の手順に従って、ここまでの手順がすべて正しく行われていることを確認します。
- 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: 最初のチャンネルを挿入するに進みます。
Last updated: 2022年8月12日