Android TVアプリの開発
2016年 12月 20日
このエントリーは、エキサイト Advent Calendar 2016 の 12/20 の記事です。
エキサイトとしては初のAdvent Calendar参戦です。
こんにちは、ビジネス開発技術部の伊藤です。
アプリをAndroid TVに対応させる
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<application
---
android:banner="アプリのバナー"
android:icon="アプリのアイコン" >
必要な機能を実装する
ブラウザ画面
概要
コード
BrowseFragment
/* 配置をリスト型にするためListRowPresenterを使用 */
ArrayObjectAdapter baseAdapter = new ArrayObjectAdapter(new ListRowPresenter());
/* プレイリストにはImageCardPresenterを使用 */
ArrayObjectAdapter playlistAdapter = new ArrayObjectAdapter(new ImageCardPresenter());
--- playlistAdapterにプレイリストを詰める ---
ListRow playlistRow = new ListRow(new HeaderItem("プレイリスト"), playlistAdapter);
/* サービス概要にはTextPresenterを使用 */
ArrayObjectAdapter aboutAdapter = new ArrayObjectAdapter(new TextPresenter());
--- aboutAdapterにサービス概要を詰める ---
ListRow aboutRow = new ListRow(new HeaderItem("サービス概要"), aboutAdapter);
baseAdapter.add(playlistRow);
baseAdapter.add(aboutRow);
setAdapter(baseAdapter);
setOnItemViewClickedListener(アイテムタップ時のリスナー);
setOnItemViewSelectedListener(アイテム選択時のリスナー);
public class ImageCardPresenter extends Presenter {
--- プレイリストの定義 ---
}
public class TextPresenter extends Presenter {
--- サービス概要の定義 ---
}
背景の変更
概要
コード
final BackgroundManager backgroundManager = BackgroundManager.getInstance(this);
backgroundManager.attach(getWindow());
setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
@Override
public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
Bitmap bitmap = --- itemで画像を取得 ---
backgroundManager.setBitmap(bitmap);
/* backgroundManager.setDrawable(画像); DrawableでもOK */
}
});
詳細画面
概要
コード
DetailsFragment
/* 詳細表示のPresenterを作成 */
FullWidthDetailsOverviewRowPresenter detailsPresenter = new FullWidthDetailsOverviewRowPresenter(new DetailsPresenter(), new LogoPresenter());
detailsPresenter.setBackgroundColor(詳細情報欄の色);
detailsPresenter.setActionsBackgroundColor(アクション欄の色);
detailsPresenter.setOnActionClickedListener(アクションタップ時のリスナー);
/* アクションを作成 */
ArrayObjectAdapter actionAdapter = new ArrayObjectAdapter();
--- actionAdapterにアクションを詰める ---
/* 詳細情報にアクションを設定 */
DetailsOverviewRow detailsRow = new DetailsOverviewRow(アイテム);
detailsRow.setActionsAdapter(actionAdapter);
/* アイテムのAdapterを設定 */
ClassPresenterSelector presenterSelector = new ClassPresenterSelector();
presenterSelector.addClassPresenter(DetailsOverviewRow.class, detailsPresenter);
ObjectAdapter itemAdapter = new ArrayObjectAdapter(presenterSelector);
itemAdapter.add(detailsRow);
setAdapter(itemAdapter);
public class DetailsPresenter extends AbstractDetailsDescriptionPresenter {
--- 詳細情報の定義 ---
}
public class LogoPresenter extends DetailsOverviewLogoPresenter {
--- ロゴの定義 ---
}
再生画面
概要
コード
PlaybackFragment
/* 再生制御のPresenterを作成 */
PlaybackControlsRowPresenter controlsPresenter = new PlaybackControlsRowPresenter(new PlaybackItemPresenter());
controlsPresenter.setBackgroundColor(アクション欄の色);
controlsPresenter.setOnActionClickedListener(アクションタップ時のリスナー);
/* 再生制御の情報を設定 */
PlaybackControlsRow controlsRow = new PlaybackControlsRow(item);
controlsRow.setTotalTime(合計の再生時間);
controlsRow.setCurrentTime(現在の再生時間);
/* 再生制御のアクションを設定 */
ArrayObjectAdapter actionsAdapter = new ArrayObjectAdapter(new ControlButtonPresenterSelector());
--- actionsAdapterにアクションを詰める ---
controlsRow.setPrimaryActionsAdapter(actionsAdapter);
/* 再生制御のAdapterを設定 */
ClassPresenterSelector presenterSelector = new ClassPresenterSelector();
presenterSelector.addClassPresenter(PlaybackControlsRow.class, controlsPresenter);
ArrayObjectAdapter controlsAdapter = new ArrayObjectAdapter(presenterSelector);
controlsAdapter.add(controlsRow);
setAdapter(controlsAdapter);
public class PlaybackItemPresenter extends AbstractDetailsDescriptionPresenter {
--- アイテム情報の定義 ---
}
おすすめコンテンツ
概要
コード
Notification recommendation = new ContentRecommendation.Builder()
.setColor(選択時の色)
.setBadgeIcon(アイコン)
.setIdTag(タグ)
.setTitle(タイトル)
.setText(文言)
.setContentImage(画像)
.setContentIntentData(遷移先のインテント)
.build().getNotificationObject(context))
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(通知ID, recommendation)