ライブテレビは、Android TV デバイス向けに設計されたリファレンス TV アプリです。ただし、デバイス メーカーは、ライブテレビのデフォルト実装ではカバーされない、製品固有の機能(画像の調整、ゲームモード、3D モードなど)を追加することが必要な場合があります。ライブテレビでは、こうしたデバイス固有の機能やオプションをサポートするために、次のカスタマイズがサポートされています。
- タイムシフト モードを有効にする(ユーザーは一時停止、早送り、巻き戻しができるようになる)。内部ストレージの代わりに外部ストレージを使用するタイムシフト モードを設定する
- テレビのオプション行にオプションを追加する
- カスタム行を追加し、そこにオプションを追加する
注: ライブ チャンネルは Google によるライブテレビの実装であり、Google サービスを搭載したデバイスでそのまま使用できます。ライブ チャンネルをカスタマイズするには、この手順で com.android.tv.*
を com.google.android.tv.*
に置き換えます。
ライブテレビをカスタマイズする
ライブテレビをカスタマイズするには、対象とする Android TV デバイスにカスタマイズ パッケージをインストールする必要があります。このパッケージは、com.android.tv.permission.CUSTOMIZE_TV_APP
権限を持つビルド済みのシステムアプリでなければなりません。
ライブテレビはこの権限を使用してシステム パッケージを検索し、リソース ファイルを確認して、カスタマイズ処理のために特定のカテゴリでマークされたパッケージのアクティビティを検出します。
重要なポイント: ライブテレビをカスタマイズできるのは 1 つのパッケージのみです。
タイムシフト モードを設定する
タイムシフト(トリックプレイ)により、Android TV デバイスでチャンネルの再生を一時停止、巻き戻し、早送りできます。ライブテレビの実装では、再生コントロール UI を介してタイムシフトを使用できます。ライブテレビでは、タイムシフトはデフォルトで有効になっていますが、無効にすることもできます。タイムシフトは、外部ストレージのみを使用するように設定することもできます。
タイムシフトを設定するには、文字列リソース trickplay_mode
を追加し、その値を次のいずれかに設定します。
enabled
: タイムシフトを有効にします。これは、オプションが指定されていない場合のデフォルト値です。disabled
: タイムシフトを無効にします。use_external_storage_only
: 外部ストレージを使用するようにタイムシフトを設定します。
<string name="trickplay_mode">use_external_storage_only</string>
TV オプションをカスタマイズする
デバイス メーカーは、音声と画像の設定へのショートカットを追加するなど、ライブテレビ設定のカスタム オプションを既存のテレビ オプション メニューに追加できます。
カスタム オプションを指定するには、アクティビティ内のカテゴリ com.android.tv.category.OPTIONS_ROW
をフィルタするインテント フィルタを宣言します。カスタム機能は、デバイス メーカーがアクティビティに実装したものです。オプションをクリックするとアクティビティが開始されます。このアクティビティのタイトルとアイコンがオプションに使用されます。ユーザー エクスペリエンスを最大限に高めるため、既存の UI に合わせてテレビ オプションをカスタマイズする必要があります。
注: Android の制限により、ライブテレビは同じカテゴリであるアクティビティ内のインテント フィルタを区別できないため、アクティビティでは 1 つのオプションしか処理できません。回避策については、1 つのアクティビティで複数のオプションを処理するをご覧ください。
デバイス メーカーは、AndroidManifest.xml
で android:priority
を定義して、既存のオプションの前または後にカスタム オプションを配置することもできます。優先度が 100 未満に定義されているオプションは、既存の項目の前に表示され、100 以上の値は後に表示されます。複数のカスタム オプション(既存のオプションの前または後)は、優先度の昇順で並べ替えられます。オプションの優先度が同じである場合、オプションの順序は未定義になります。
この例では、オプションはテレビのオプション行の最初に表示され、オプションをクリックすると PictureSettingsActivity が起動します。
<activity android:name=".PictureSettingsActivity" android:label="@string/activity_label_picture_settings" android:theme="@style/Theme.Panel"> <intent-filter android:icon="@drawable/ic_tvoptions_brightness" android:label="@string/option_label_brightness" android:priority="0"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.OPTIONS_ROW" /> </intent-filter> </activity>
1 つのアクティビティで複数のオプションを処理する
オプションはアクティビティのインテント フィルタにマッピングされており、その逆も同様です。Android は、同じカテゴリとアクションのインテント フィルタを区別しないため、アクティビティで複数のインテント フィルタが宣言されている場合でも、1 つのオプションしか処理しません。アクティビティで複数のオプションを処理するには、AndroidManifest.xml
で <activity-alias>
を使用します。アクティビティで、getIntent().getComponent()
を使用してクリックされたオプションを特定します。
<activity-alias android:name=".AnyUniqueName" android:targetActivity=".PictureSettingsActivity"> <intent-filter android:icon="@drawable/ic_tvoptions_energy_saving" android:label="@string/option_label_energy_saving" android:priority="1"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.OPTIONS_ROW" /> </intent-filter> </activity-alias>
カスタム行を作成する
デバイス メーカーは、テレビのオプション行の上に行を追加してカスタマイズできます。このカスタム行は省略可能です。
行のタイトル
res/values/strings.xml
で partner_row_title
文字列を定義します。この文字列の値は、カスタム行のタイトルに使用されます。
<string name="partner_row_title">Partner Row</string>
カスタム オプション
カスタム行にカスタム オプションを追加するには、テレビのオプション メニューにオプションを追加する手順に沿います。ただし、代わりにカテゴリ名を com.android.tv.category.PARTNER_ROW
に変更します。
<activity android:name=".ThreeDimensionalSettingDialogActivity" android:label="@string/activity_label_3d" android:theme="@android:style/Theme.Material.Light.Dialog"> <intent-filter android:icon="@drawable/ic_tvoptions_3d" android:priority="0"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.PARTNER_ROW" /> </intent-filter> </activity>