6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Xamarin for Visual Studio で Android Wear 開発

Last updated at Posted at 2014-11-18

こんにちは。エクセルソフトの田淵です。

無事 Xamarin for Visual Studio でも Android Wear アプリの開発が出来ることを確認しましたので、備忘録として残します。

必要なシステム

  • Visual Studio Professional (Xamarin の対応は 2010 以上ですが最新版を使いましょうw)
  • Android SDK 20 (2014/11/18 現在の最新版で大丈夫です)
    AndroidSDK20.png
  • Xamarin for Visual Studio Beta 3.8.134.0 (丁度今日 2014/11/18 に 3.8.145 がリリースされました。。まだ試していません。。)

事前準備

実機の Android Wear 端末か、Wear Emulator を用意して、実機の Android 端末と接続しておきましょう。詳細は以下をご参照ください。
Windows の Android Studio で Wear アプリを動かす - Qiita

エミュレーターを使用する場合は、Hardware Keyboard present にチェックが入っていると、Speak Now の時にキーボードで文字を入力できます。
スクリーンショット 2014-11-18 14.47.53.png

接続済み となっていて、デモカードが動作していれば問題ありません。
スクリーンショット 2014-11-18 14.15.31.png

実機の画面は Android Screen Monitor を使って PC に表示しています。

開発してみよう

Visual Studio を起動し、Android > Blank App (Android) で新しいプロジェクトを作ります。
スクリーンショット 2014-11-17 20.55.33.png

Wear は Android 4.3 以上の端末が要件ですので、プロジェクトのプロパティで Minimum Android to Target を API 18 (v4.3) にします。
スクリーンショット 2014-11-18 14.19.49.png

Wear 対応のアプリを開発するには Xamarin Support Library v4 が必要になりますので、 NuGet から取得します。
パッケージマネージャーから PM> Install-Package Xamarin.Android.Support.v4 -Version 20.0.0.4 としても構いません。(依存関係で Xamarin.Android.Support.v13 もインストールされる事があるようです)
スクリーンショット 2014-11-17 22.30.57.png

後は色々見ながらコードを書いていけば大丈夫です!

ちょうど、Amazon.co.jp: 日経ソフトウエア 2014年 12月号: 日経ソフトウエア: 本 で Android Wear 特集が掲載されていたので、そのコードを Xamarin で動くように写経しました。GitHub にアップしましたので、興味があれば見てみてください。

Android/Wear_Sample at master · ytabuchi/Android

動作イメージ:
https://www.youtube.com/watch?v=sUP3RSLziKs

以下のようになりました。

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());

            };
        }

インテントを受け取る Activity

StartActionActivity.cs
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 不要で小さいアプリであれば Xamarin Starter でも出来そうですし、Android Wear 楽しそうですよ!?

是非 Xamarin をダウンロード して触ってみてください。

その次は

Samples | Xamarin にサンプルアプリがありますので、是非ダウンロードして触ってみてください。
FindMyPhone | Xamarin が、Android アプリ側が Service として動作し、Wear からサービスを起動するので面白そうです。

以上です。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?