XamarinでのAndroidのウォッチフェイスアプリ開発に便利なライブラリを作成しました!

こんにちはー!ニアです。

今、Xamarinを使ったAndroid Wear用ウォッチフェイスアプリを作っているのですが、

今回はそのアプリ開発に便利なライブラリを作ってきたので、紹介します。

1. Chronoir_net.Chronica.WatchfaceExtensionの概要

Chronoir_net.Chronica.WatchfaceExtension(旧名 : Chronoir_net.Chronoface.Utility)は、XamanrinでのAndroid Wearのウォッチフェイスアプリ開発において、便利な機能を提供します。

主な機能としては、以下のものがあります。

  • タイムゾーンやバッテリー残量の通知など、ブロードキャストされたIntentを受信し、あらかじめ指定したデリゲートやイベントを実行する機能
  • 現在時刻から、アナログ時計用の時針、分針、秒針の先端位置を求められる機能
  • ContextCompat.GetColorメソッドの戻り値(ARGB値を格納した整数)をColor型オブジェクトに変換する機能

今後、様々な機能を追加する予定です。

 

1.1. ライブラリ概要

ライブラリ名 Chronoir_net.Chronica.WatchfaceExtension
バージョン 1.0.2
作成者 智中ニア(Nia Tomonaka)
リリース日 2016/12/03
最終更新日 2016/01/25
対応プラットフォーム Xamarin.Android
依存関係 なし
言語 英語(en)、日本語(ja)
ライセンス MIT-Licence
GitHub  https://github.com/Nia-TN1012/Chronoir_net.Chronica.WatchfaceTemplates
プログラミング言語 / フレームワーク C# / Xamarin.Android
開発環境 Visual Studio Community 2015 Update 3

ライブラリはNuGetパッケージとして、NuGet Galleryで公開しています。NuGetパッケージマネージャーなどでダウンロードしてお使いください。

https://www.nuget.org/packages/Chronoir_net.Chronica.WatchfaceExtension/

※ライブラリのダウンロードページは後日追加します。

 

2. 使い方

※現在、作成中です。

2.1. WatchfaceUtilityクラス

WatchfaceUtilityクラスは、ContextCompat.GetColorメソッドの戻り値(ARGB値を格納した整数)をColor型オブジェクトに変換(ConvertARGBToColorメソッド)したり、AndroidのTimeクラスやJavaのCalendarクラスのオブジェクトを同日時の.NETのDateTime構造体に変換(ConvertToDateTimeメソッド)したりする機能を搭載しています。

 

2.2. BroadcastRecieverクラスの拡張

本ライブラリは、作成したBroadcastRecieverオブジェクトをIntentフィルターとともにApplication.Contextに登録・削除する機能を搭載した、RegistrationSwitchableBroadcastReceiverクラスを提供しています。

IsRegisteredプロパティにtrueをセットすると、レシーバーをApplication.Contextに登録し、falseをセットすると、レシーバーをApplication.Contextから削除します。

バージョン1.0.1より、レシーバーをApplication.Contextに登録するRegisterToContextメソッドと、レシーバーをApplication.Contextから削除するUnregisterFromContextメソッドが追加されました。

 

RegistrationSwitchableBroadcastReceiverクラスは抽象クラスなので、継承して使ってね

 

また、本ライブラリは、ブロードキャストされたIntentを受信した時、あらかじめ登録しておいた処理を実行可能な、ActionExecutableBroadcastReceiverクラス及びEventExecutableBroadcastReceiverクラスを提供しています。

どちらのクラスも、前述のRegistrationSwitchableBroadcastReceiverクラスを継承しており、RegisterToContextメソッドやUnregisterFromContextメソッドの呼び出し、IsRegisteredプロパティへのセットで、レシーバーの登録・解除ができます。

また、OnRecieveメソッドがオーバーライドされており、ActionExecutableBroadcastReceiverクラスでは、コンストラクターで指定したAction<Intent>型デリゲートに紐付けたメソッドを、EventExecutableBroadcastReceiverクラスでは、EventHandler<Intent>型イベントハンドラー(BroadcastedIntentRecieved)に紐付けたメソッドを実行します。

これらを利用することで、Broadcastrecieverを使った処理を簡潔に表すことができます。

2つのクラスの違いを表に示します。

ActionExecutableBroadcastReceiver EventExecutableBroadcastReceiver
デリゲートの型 Action<Intent> EventHandler<Intent>
メソッドを指定するタイミング コンストラクターで初期化する時 コンストラクターで初期化後、インスタンスが有効である限り、いつでも
引数
  • Intent型
  • object型(Application.Contextが格納されています。)
  • Intent型
メソッドの数 0~1 0~(メモリが許す限り)
メソッドの追加・削除・変更 不可

 

◆ Attention

BroadcastRecieverのOnRecieveメソッドは、UIと同じスレッドで実行しており、素早く処理を終えるか別スレッドで実行することが推奨されています

ActionExecutableBroadcastReceiverクラスのデリゲートやEventExecutableBroadcastReceiverのイベントハンドラーにセットする処理も同様に、素早く終える必要があります。

もし、重い処理を実行したい場合、async / awaitキーワードなどを利用して、UIとは別のスレッドで実行するようにします。

こういう時、C#のasync / awaitが強みになるね

 

3. おわりに

今回開発したライブラリとともに、ウォッチフェイスアプリをすぐに開発できるプロジェクトテンプレートも作っています。

(実はというと、ソース自体はほぼ完成していて、あとはVSIXパッケージの作成とテスト中です)

完成を楽しみに~

 

それでは、See you next!

 

更新履歴

  • 2017/01/26 : ウォッチフェイスアプリ開発用ツールキットのブランド名の決定に伴い、ライブラリ名を変更しました。

 

この記事をシェアする
Chronoir.netのRSSフィードを購読する

About : ニア(Nia)

紅茶とコーヒーが好きな湘南生まれのプログラマー/ITエンジニアです。主にC#/C++/PHPを使ってプログラミングをしています。趣味は写真撮影と音ゲーです。時々イラストを描いています。プログラミングを勉強している方々と仲良くなりたいです! 興味を持っている分野:UWP/Xamarin/Android Wear/WPF/Windows/Visual Studio/WordPress/KUSANAGI/nginx

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*