くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Xamarin.Android で画面を消灯させないようにする

基本的には、 Android で開発を行うのと同じようにやっていけばOK

OnCreate の中で AddFlags するだけ

MainActivity.cs

// OnCreate の中
Window.AddFlags(WindowManagerFlags.KeepScreenOn);

参考

画面をスリープ状態にさせないためには - 逆引きAndroid入門

Visual Studio for Mac で using していないクラスも入力補完して欲しい

グロサミでやまちゅう氏と話してて見つけた Tips です。

f:id:kuxumarin:20180307060436p:plain

インポート項目を表示するという項目を設定から変更すればできる感じのようです。

Visual Studio 15.5.1 がリリースされています。 Xamarin.Forms のテンプレートの不具合が修正されています。

Visual Studio 15.5 がリリースされたと思っていたら、すぐにバグ修正を中心とした 15.5.1 がリリースされていますね。

リリースノート

www.visualstudio.com

主な変更

  • Xamarin.Forms のテンプレートの修正
  • Git のブランチを切り替えるとインテリセンスが効かなくなる不具合の修正
  • Xamarin の XCode 9.2 のサポート

Remoted iOS Simulator 無償化! Xamarin ユーザーのための Visual Studio 2017 Update 5 (15.5) 解説,

こんにちは。 Visual Studio 2017 の マイナーバージョン 5 となる 15.5 がリリースされましたね。 マイナーリリースとはいえ、新機能が続々と搭載されています。

リリースノート

Visual Studio 15.5 のリリースノートはこちらです。 例のごとく日本語版のリリースノートはまだ提供されていません。

www.visualstudio.com

Visual Studio 15.5 の Xamarin 関係のリリース目次

  • C# 7.2 サポート
  • Remoted iOS Simulator 無償化 全 Visual Studio で利用可能に
  • Xamarin.Forms Template, Net Standard
  • Live Xaml プレビュー
  • Xamarin.iOS 11.4 サポート
  • Xamarin.Android 8.1 サポート

詳細な解説

C# 7.2 サポート

C# の最新バージョンである C# 7.2 が正式リリースされましたね。 Span が導入されたり細かくともインパクトのでかいアップデートになっている印象です。 詳細については、未確認さんのブログを参照ください。 ufcpp.net

Remoted iOS Simulator 無償化 全 Visual Studio で利用可能に

Remoted iOS Simulator とは、 Windows から Windows 機と接続している Mac 機で動く iOS Simulator を見ることができるサービスです。 今までは、 Visual Studio のお高いバージョンでしか利用することができませんでしたが、無償化されました。 無償化されたことにより Visual Studio Community Edition を利用しているユーザーでも 利用することができるようになりました。

Xamarin.Forms Template with .Net Standard

.net な世界では 今まで PCL (Portable Class Lubrary)と呼ばれる形式でライブラリを作成するのが一般的でした。これからの .net な世界では .net standard という形式でライブラリを作成するのが一般的になっていっています。 今回、 Xamarin.Forms のプロジェクトテンプレートも .net standard がデフォルトになってきました。

詳しい情報については、 JXUG の田淵さんのブログに詳しく書いてあります。

ytabuchi.hatenablog.com

Live Xaml プレビュー

「Xamarin.Forms で Xaml を使いUIを書いているときにプレビュー機能がない」問題に対する Xamarin チームの答えかなと思います。 具体的には、以下の動画にあるように Live Player な画面にXamlのプレビューを表示するという形のようです。

https://blog.xamarin.com/wp-content/uploads/2017/11/LivePlayer.mp4?autoplay=false

現状は Android のみのサポートみたいですね。 メリットとしては、ビルド・デプロイのプロセスを踏まずに Xaml のUIを確認することができる点ですね。 開いている .Xaml ファイルを変えるとプレビューされる画面も変更になるようです。

Xamarin.iOS, Xamarin.Android 8.1 サポート

Xamarin は各プラットフォームOSの最新バージョンをサポートしていってますね!

Chrome Custom Tabs の Xamarin.Android での基本的な使い方

Chrome な Web View を手っ取り早く利用したくて使いました。 それ以外にも、起動が早かったりと様々な利点があります、それを利用できたらいいなと。

実行画面

単純なコードを呼び出しているだけなのに、 基本的な Web ブラウザ的な機能がそろっています。ユーザーからしても普段利用している Google Chrome に似ているブラウザっぽい画面なため、ユーザーの体験の向上にもつながります。

f:id:kuxumarin:20170827015205j:plain f:id:kuxumarin:20170827015209j:plain f:id:kuxumarin:20170827015211j:plain

利用方法

Nuget から 必要なパッケージをインストール

Google Chrome Custom Tabs を利用するための Support Library をインストールする このパッケージは、 Xamarin 社(正確にはMicrosoft)が公式で Android 向けに Google の出している Support Library をXamarinから使えるようにしたものです。

Xamarin.Android.Support.CustomTabs って名前のパッケージです。

f:id:kuxumarin:20170827004310p:plain

コード

var builder = new CustomTabsIntent.Builder();
var chromeIntent = builder.Build();
chromeIntent.LaunchUrl(this, Uri.Parse("http://kuxumarin.hatenablog.com/"));
StartActivity(chromeIntent.Intent);

アプリ開発をサポートする App Center とは! Xamarin とも連携してくれるよ!

こんにちは。

Xamarin の Advent Calendar に書いてますが、 App Center について書いていきます。 GA(正式リリース)前は、 Mobile Center という名前だったのでそちらのほうがなじみ深い人が多いかもしれません。

細かく網羅的な情報は田淵さんが書いている(と思う)ので自分は、 Tips 的なものを列挙していきます。 自分が使っていてここが惜しい!とかここは最高!みたいな部分について書いていきます。

実際に使ってどうだったのかは明日のやまちゅうさんの記事を楽しみにしてください。

基本的な機能や情報については以下の記事を参考にしてください。

[http://kuxumarin.hatenablog.com/entry/2017/11/16/%E3%80%8C%E9%80%9F%E5%A0%B1%E3%80%8DVisual_Studio_App_Center%28%E6%97%A7Mobile_Center%29%E3%81%8CGA%21:embed:cite]

上の記事で書ききれなかったことを書いていきます。

Mobile Center の Build に成功したら Distribute で自動配布する機能は便利

開発をしていて、いくつもの端末で動作チェックしたいなーと思うことがあると思います。 そんな時は、 Mobile Center の Distribute 機能を使うと便利です。

ただ単体で使うのもよいと思いますが、御覧のように Build に成功したら自動配布してくれるオプションがついます! 配布するグループも選べるので開発チーム内へはこの機能を使って配布すると便利です!

細かな説明が必要な相手に対しては Distribute 自動配布機能を使わない方がいい

Release Branch へ送る前の Master Branch に存在しているアプリを一般公開前にチェックしたいということがあると思います。 Distribute 自動配布機能を使うと確かにお気軽に配布することはできます。しかし、「どんな機能が追加されたのか」とかを書きたいですよね?(新しい

App center のビルド機能の無料枠がきついと思う

MS MVP のあめいさんが質問していますが、 月に 240 分のビルド時間は モバイルアプリのビルドをするための時間としては少ないです。 ので、プッシュ事にビルドする機能をオフにするなど運用する際に調整すればある程度回避することができます。

Xamarin.Android で 周辺の Wifi Spot の一覧を取得する

コード

 protected override void OnCreate(Bundle savedInstanceState)
        {
            // 良さげな Permission 設定はしてくださいませ
            // Access_Wifi_State とか
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            var connectButton = FindViewById<Button>(Resource.Id.ConnectButton);
            var wifiStatusText = FindViewById<TextView>(Resource.Id.WifiStatusText);

            connectButton.Click += (sender, args) =>
            {
                using (var wifiManager = GetSystemService(Context.WifiService) as WifiManager)
                {
                    wifiManager.StartScan();
                    wifiStatusText.Text = "Wifi の接続状況\n";
                    wifiManager.ScanResults.Where(result => !string.IsNullOrEmpty(result.Ssid)).Select(result => $"SSID: {result.Ssid} 接続レベル: {result.Level} \n").ToList().ForEach(s => wifiStatusText.Text += s);
                }
            };
        }

実行結果

f:id:kuxumarin:20171120115206j:plain

既知 の Wifi Spot に Xamarin.Android なアプリから接続する

コード

 protected override void OnCreate(Bundle savedInstanceState)
        {
            // 良さげな Permission 設定はしてくださいませ
            // Access_Wifi_State とか
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            var connectButton = FindViewById<Button>(Resource.Id.ConnectButton);
            var wifiStatusText = FindViewById<TextView>(Resource.Id.WifiStatusText);

            connectButton.Click += (sender, args) =>
            {
                var TartgetSSID = "daido-o";
                WifiConfiguration tartgetSpot;
                using (var wifiManager = GetSystemService(WifiService) as WifiManager)
                {
                    if (wifiManager != null && !wifiManager.IsWifiEnabled) return;
                    tartgetSpot = wifiManager?.ConfiguredNetworks.First(configuration => configuration.Ssid.Replace("\"","") == TartgetSSID);
                }
                wifiStatusText.Text = $"接続中: {tartgetSpot?.Ssid}";
            };
        }

実行結果

f:id:kuxumarin:20171120114155j:plain