Windows系のあれこれ

港区の SIer で よくわからんことをしている SE みたいな人です。Xamarin 中心です。

(おそらく)世界一簡単にXamarin.Formsのアプリに特定の値でQRコードを生成して表示する方法

public MainPage()
{
    var QrValue = "QRコードにしたい文字列";

    var imgQr = new Image { Aspect = Aspect.AspectFit };
    imgQr.Source = ImageSource.FromUri(new Uri($"http://chart.apis.google.com/chart?cht=qr&chs=200x200&chld=H|0&chl={QrValue}"));

    Content = imgQr;
}

以上!


というのも寂しいので、ちょっと解説です。
みなさんご存知の通り、XamarinにはURLを画像ソースに指定する機能があります。
developer.xamarin.com

それを利用してGoogleQRコード生成のAPIを呼び出し、その結果を設定しているだけです。
QR Codes  |  Infographics  |  Google Developers
※Warning: This API is deprecated. Please use the actively maintained Google Charts API instead. See our deprecation policy for details.
 ということで現在、このAPIは非推奨のようなのでいつ使えなくなるかわかりません。
 また、非推奨になったことでライセンスもよくわかりませんでした。
 なので自己責任でお願いします

画像として返却してくれるAPIであればこれでなくてもなんでも大丈夫だと思います。

さらにおまけで…

こんな感じでイメージコントロールとインジケーターを重ねておいてイメージの読み込みが完了するまでぐるぐるが表示されるようにするといい感じですね。
(このAPIからのレスポンスが一瞬なのでぐるぐるが見えることはないかもしれません。。。)

public MainPage()
{
    var QrValue = "QRコードにしたい文字列";

    var imgQr = new Image { Aspect = Aspect.AspectFit };
    imgQr.Source = ImageSource.FromUri(new Uri($"http://chart.apis.google.com/chart?cht=qr&chs=200x200&chl={QrValue}"));

    var prgIndicator = new ActivityIndicator{
                                HorizontalOptions = LayoutOptions.CenterAndExpand,
                                VerticalOptions = LayoutOptions.CenterAndExpand
                            };

    imgQr.PropertyChanged += (sender, e) =>
    {
        if (e.PropertyName != nameof(imgQr.IsLoading))
            return;
        prgIndicator.IsRunning = imgQr.IsLoading;
        prgIndicator.IsVisible = imgQr.IsLoading;
    };

    Content = new Grid { Children = { prgIndicator, imgQr } };
}