こんにちは。エクセルソフトの田淵です。
無事 Xamarin for Visual Studio でも Android Wear アプリの開発が出来ることを確認しましたので、備忘録として残します。
必要なシステム
- Visual Studio Professional (Xamarin の対応は 2010 以上ですが最新版を使いましょうw)
- Android SDK 20 (2014/11/18 現在の最新版で大丈夫です)
- Xamarin for Visual Studio Beta 3.8.134.0 (ちょうど今日 2014/11/18 に 3.8.145 がリリースされました。。まだ試していません。。)
事前準備
実機の Android Wear 端末か、Wear Emulator を用意して、実機の Android 端末と接続しておきましょう。詳細は以下をご参照ください。
Windows の Android Studio で Wear アプリを動かす - Xamarin 日本語情報
エミュレーターを使用する場合は、
Hardware Keyboard present
にチェックが入っていると、Speak Now の時にキーボードで文字を入力できます。
接続済み となっていて、デモカードが動作していれば問題ありません。
実機の画面は Android Screen Monitor を使って PC に表示しています。
開発してみよう
Visual Studio を起動し、Android > Blank App (Android)
で新しいプロジェクトを作ります。
Wear への接続は Android 4.3 以上の端末が要件ですので、プロジェクトのプロパティで Minimum Android to Target
を API 18 (v4.3) にします。
Wear 対応のアプリを開発するには Xamarin Support Library v4
が必要になりますので、 NuGet から取得します。
パッケージマネージャーから PM> Install-Package Xamarin.Android.Support.v4 -Version 20.0.0.4
としても構いません。(依存関係で Xamarin.Android.Support.v13 もインストールされる事があるようです)
後は色々見ながらコードを書いていけば大丈夫です!
ちょうど、Amazon.co.jp: 日経ソフトウエア 2014年 12月号: 日経ソフトウエア: 本 で Android Wear 特集が掲載されていたので、そのコードを Xamarin で動くように写経しました。GitHub にアップしましたので、興味があれば見てみてください。
Android/Wear_Sample at master · ytabuchi/Android
動作イメージ:
Visual Studio で Android Wear アプリ開発 - YouTube
コードは以下です。
MainActivity.cs
using Android.Support.V4.App; ... protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { // Wear の入力画面を構築 // RemoteInput.Builder だと Android.RemoteInput と競合するのでフルで指定しています。 // 正式な書き方は不明です。。 var remoteInput = new Android.Support.V4.App.RemoteInput.Builder("Reply") .SetLabel(GetText(Resource.String.Reply)) // "Reply Label" .Build(); // pendingIntent で起動する Activity var intent = new Intent(this, typeof(StartActionActivity)); // Wear の Update を待つ処理 var replyPendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.UpdateCurrent); // Wear でスワイプ (Extender?) した際のアクション var replyAction = new NotificationCompat.Action.Builder( Android.Resource.Drawable.IcButtonSpeakNow, GetText(Resource.String.Reply), replyPendingIntent) // "リプライ" .AddRemoteInput(remoteInput) .Build(); // Wear の Extender を構築 var wealableExtender = new NotificationCompat.WearableExtender() .AddAction(replyAction); // Wear の Notification を構築 var notificationBuilder = new NotificationCompat.Builder(this) .SetSmallIcon(Android.Resource.Drawable.IcDialogAlert) .SetContentTitle(GetText(Resource.String.AlertTitle)) // "アラート" .SetContentText(GetText(Resource.String.AlertMessage)) // "左にスワイプしてください" .Extend(wealableExtender); // Notification を送る Activity を指定 var notificationManager = NotificationManagerCompat.From(this); // 実際に Notification を送る notificationManager.Notify(1, notificationBuilder.Build()); }; }
インテントを受け取る StartActionActivity
using Android.Support.V4.App; ... protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.StartAction); // Wear からの Intent を受け取る。getIntent() メソッドに相当。 // http://www.buildinsider.net/mobile/xamarintips/0004 参照 var intent = this.Intent; // RemoteInput.GetResultsFromIntent だと Android.RemoteInput と競合するのでフルで指定しています。 // 正式な書き方は不明です。。 var remoteInput = Android.Support.V4.App.RemoteInput.GetResultsFromIntent(intent); var reply = remoteInput.GetCharSequence("Reply"); var textView = FindViewById<TextView>(Resource.Id.textView1); System.Diagnostics.Debug.WriteLine("{0} {1}", "User reply from wearable: ", reply); textView.Text = string.Format("{0} {1}", "User reply from wearable: ", reply); } }
Mac 不要ですし Android Wear 楽しそうですよ!?
是非 Xamarin をダウンロード して触ってみてください。
その次は
Samples | Xamarin にサンプルアプリがありますので、是非ダウンロードして触ってみてください。
FindMyPhone | Xamarin が、Android アプリ側が Service として動作し、Wear からサービスをキックするので面白そうです。
以上です。