ぷろじぇくと、みすじら。

Filtered by Tag: AndroidTv

XamarinでもAndroid TVアプリが作りたい

Created at: | Tag: AndroidTv Xamarin CSharp

XamarinがついにVisual Studioの一部となって、Visual Studio利用者であれば追加コストなしで使えるようになりました。Starterではなくてサイズ制限のないフル機能を使えるのでまともな開発ができます。

Xamarinの良し悪しや意義とかは置いておくとして、Androidアプリの開発ができるということはAndroid TVのアプリも作れるということなのでデバッグ実行するまでの流れを試してみました。SonyのBRAVIA(2015)での手順ですがBRAVIA以外のAndroid TV(Nexus Playerなど)でも大体同じ流れだと思います。

動かすアプリはXamarinのデフォルトテンプレートで出来るもの(ボタンを押すとカウントが増えるもの)をそのまま使うことにします。

テレビ(Android TV)側の設定と接続

まずはテレビ側でデバッグをできるように設定します。と言ってもほぼ普通のAndroidと同じです。

  1. 設定から端末情報→ビルドの項目を連打して開発者向けオプションを有効にする
  2. システム機能設定カテゴリの開発者向けオプション→デバッグ→ADBデバッグを「入」

Get started | Sony Developer Worldにも詳しく書いてあります。

つぎにコンピューターからadbコマンドからテレビに接続します。 なお、adbコマンドはXamarin.Androidとともにインストールされたものは%LOCALAPPDATA%\Android\android-sdk\platform-toolsにあります。

adb kill-server
adb start-server
adb connect <IPアドレス>

この adb connect に指定するIPアドレスはテレビのIPアドレスです。ネットワーク設定あたりから確認できます。

C:\Users\Tomoyo\AppData\Local\Android\android-sdk\platform-tools>adb connect 192.168.1.100
connected to 192.168.1.100:5555

コマンドが成功するとコンピューター側には何も出ませんが、テレビ側にUSBデバッグの許可を求めるダイアログが出るのでOKを押してください。

テレビ側で許可をして adb devices で接続したIPのデバイスが出てくれば完了です。

C:\Users\Tomoyo\AppData\Local\Android\android-sdk\platform-tools>adb devices
List of devices attached
192.168.1.100:5555      device
emulator-5554   device

後はVisual Studioのデバッグ実行ボタンにターゲットとしてテレビが出てくるのでクリックするとテレビにアプリがデプロイされてデバッグ実行されます。なお、初回時は共有ライブラリをインストールするのでちょっと時間がかかります。

スクリーンショット: Visual Studio 2015のツールバーから起動

アプリケーションをAndroid TV対応にする

アプリケーションをテンプレートから作ったままだと、Android TV感のない単なるAndroidアプリになる上にホーム画面にも出てこない状態ですので少々対応が必要です。

スクリーンショット: アプリ画面

まず、Android TVの機能を含むライブラリ(v17 Leanback Library)やテーマを使えるように、Xamarin Components StoreからAndroid Support Library V17 Leanbackをインストールします。このコンポーネントをダウンロードするにはXamarinアカウントが必要です。

ちなみにAPI中でLeanbackという言葉が出てきたらそれはAndroid TV的なものを指しています。

そして次にアクティビティにテーマを設定します。 アプリケーションに一括でAndroid TV向けテーマを適用する場合にはAndroidManifest.xmlのapplication要素にtheme属性を追加します。

<application android:label="App17" android:theme="@style/Theme.Leanback"></application>

もしアクティビティ単位で適用したいのであれば、アクティビティのクラスについているActivityカスタム属性のThemeプロパティを設定します。

[Activity(Label = "App17", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/Theme.Leanback")]

これでタイトルバーが消えたり、ボタンがフラットになったりと見た目がAndroid TV向けっぽくなります。

スクリーンショット: アプリ画面

次にホームにアプリケーションを起動するアイコンというかタイルというかを表示するためのコードを追加します。Android TV向けのアプリケーションはホームから起動できるということを明示的に設定する必要があり、何も指定しないと表示されません。

設定は起動対象としたいアクティビティ、大抵はActivityカスタム属性のMainLauncherプロパティがtrueになっているアクティビティにIntentFilterカスタム属性を追加します。

[Activity(Label = "App17", MainLauncher = true, Icon = "@drawable/icon")]
[IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { Intent.CategoryLeanbackLauncher })]
public class MainActivity : Activity
{
...
}

IntentFilterでカテゴリがCategoryLeanbackLauncherのActionMainを捕まえられるようにするという感じです。

これでホームにアイコンが出てくるようになります。

スクリーンショット: ホーム

ということで準備はできたのであとは頑張ってアプリを作るだけです。

Visual StudioでF5を押すとテレビにアプリを転送、起動してブレークポイントでブレークできるというのはなかなか面白い体験です。そもそもテレビにadbで接続してshellを叩けるという時点で不思議体験でもあります。

ぜひ皆さま、Android TVを買ってC#で開発しましょうということでたまにはアフィリエイトおいておきますね。

ソニー 地上・BS・110度CSデジタルハイビジョン液晶テレビ BRAVIA X8500C 55V型 KJ-55X8500C