
こんにちはー!ニアです。
今、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パッケージマネージャーなどでダウンロードしてお使いください。
※ライブラリのダウンロードページは後日追加します。
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メソッドが追加されました。
また、本ライブラリは、ブロードキャストされたIntentを受信した時、あらかじめ登録しておいた処理を実行可能な、ActionExecutableBroadcastReceiverクラス及びEventExecutableBroadcastReceiverクラスを提供しています。
どちらのクラスも、前述のRegistrationSwitchableBroadcastReceiverクラスを継承しており、RegisterToContextメソッドやUnregisterFromContextメソッドの呼び出し、IsRegisteredプロパティへのセットで、レシーバーの登録・解除ができます。
また、OnRecieveメソッドがオーバーライドされており、ActionExecutableBroadcastReceiverクラスでは、コンストラクターで指定したAction<Intent>型デリゲートに紐付けたメソッドを、EventExecutableBroadcastReceiverクラスでは、EventHandler<Intent>型イベントハンドラー(BroadcastedIntentRecieved)に紐付けたメソッドを実行します。
これらを利用することで、Broadcastrecieverを使った処理を簡潔に表すことができます。
2つのクラスの違いを表に示します。
ActionExecutableBroadcastReceiver | EventExecutableBroadcastReceiver | |
---|---|---|
デリゲートの型 | Action<Intent> | EventHandler<Intent> |
メソッドを指定するタイミング | コンストラクターで初期化する時 | コンストラクターで初期化後、インスタンスが有効である限り、いつでも |
引数 |
|
|
メソッドの数 | 0~1 | 0~(メモリが許す限り) |
メソッドの追加・削除・変更 | 不可 | 可 |
注意
BroadcastRecieverのOnRecieveメソッドは、UIと同じスレッドで実行しており、素早く処理を終えるか別スレッドで実行することが推奨されています。
ActionExecutableBroadcastReceiverクラスのデリゲートやEventExecutableBroadcastReceiverのイベントハンドラーにセットする処理も同様に、素早く終える必要があります。
もし、重い処理を実行したい場合、async / awaitキーワードなどを利用して、UIとは別のスレッドで実行するようにします。
3. おわりに
今回開発したライブラリとともに、ウォッチフェイスアプリをすぐに開発できるプロジェクトテンプレートも作っています。
(実はというと、ソース自体はほぼ完成していて、あとはVSIXパッケージの作成とテスト中です)
完成を楽しみに~
更新履歴
- 2017/01/26 : ウォッチフェイスアプリ開発用ツールキットのブランド名の決定に伴い、ライブラリ名を変更しました。
[END]
コメント