Xamarin.Android ZXing.Net Mobileを使ってみた
簡単にスキャナが作れると言うことで、ZXing.Net Mobileを使ってみました。
https://github.com/Redth/ZXing.Net.Mobile
こちらにあるSampleコードとほとんど同じです。
インストール
NuGetからZXing.Net.Mobileをインストール
Manifest設定
プロジェクトのプロパティの[Android Manifest]から
[Required permissions]で
CAMERA
FLASHLIGHT
をチェックオン
画面レイアウト
サンプルはいくつかボタンがありますが、取りあえず標準動作と思われる物のボタンのみ配置
MainActivity
以下のように記載
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); var scanner = new MobileBarcodeScanner(); // Resource取得 var buttonScanDefaultView = this.FindViewById<Button>(Resource.Id.buttonScanDefaultView); // Clickイベント設定 buttonScanDefaultView.Click += async (sender, e) => { scanner.UseCustomOverlay = false; scanner.TopText = "Hold the camera up to the barcode"; scanner.BottomText = "Wait for the barcode to automatically scan!"; var result = await scanner.Scan(); HandleScanResult(result); }; } /// <summary> /// 読み込み結果に対する処理 /// </summary> /// <param name="result"></param> public void HandleScanResult(ZXing.Result result) { string msg = string.Empty; if (result != null && !string.IsNullOrEmpty(result.Text)) msg = "Found Barcode: " + result.Text; else msg = "Scanning Canceled"; this.RunOnUiThread(() => Toast.MakeText(this, msg, ToastLength.Short).Show()); }
ビルドして実行・・・
認識早いですね。こりゃ便利。 他の機能も試してみようと思います(・ω・)ノ
不明点
Runtime Permissionの設定方法が良くわかりません・・・
ZXing.Net.Mobile.Formsの場合は、以下の内容で良いらしいですが。
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) { global::ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult (requestCode, permissions, grantResults); }
Xamarin.Android 各種Layoutについて
デザイナでツールボックスを見てると、Layoutがいくつもあって良くわからなかったので調べた内容のメモです。
LinearLayout(Horizontal)
- コントロールが横に並べられる。
LinearLayout(Vertical)
- コントロールが縦に並べられる。
GridLayout(Vertical)
TableLayout
RelativeLayout
コントロールに対して相対的な位置を指定して配置できる。 このButtonは画面右上とか、とあるButtonの右と言った指定が可能なので、うまく使えば複雑なレイアウトが作れそう。
デザイナから画面にコントロールを置くのが難しかった・・・(絶妙な場所にドラック&ドロップしないと配置できなかった)
これまではWindows Formでの開発がメインだったので、 同じように好きな場所にポイポイコントロールを配置できるのかと思っていました。 慣れるまでは画面レイアウトの作成が大変そうです。
Visual Studio Emulator for Androidが「UDPポートを構成できませんでした。」で起動できない
エミュレータの起動でいきなり嵌りました。
Surface Pro3でデバック実行すると、タイトルのエラーが出て起動できませんでした。
しかも画面には
なんて出るもんだから 「Androidのエミュレータ起動してるのに、なんでWindows Phone OSを起動しています。なの?設定間違ってる?」 と、これが合ってるかどうか分からず迷走しました。。。(皆さん最初はそう思いませんでしたか?)
以下のサイトを参考にさせてもらいましたが、私の環境では結果は変わりませんでした。
https://msdn.microsoft.com/ja-jp/library/mt228282.aspx#XamarinPlayer
煮詰まってしまったので、試しにデスクトップPCで試したところ、あっさり起動・・・orz
参考サイトの内容からHyper-Vインストール時に作成される仮想のネットワークカードが何か悪さしてるんだろうなと思っていたので、Surfaceの環境と見比べた結果、私の場合はVPN接続用のソフト*1が問題だったようで、 アンインストールするとSurfaceの方でもエミュレータが起動できました。
ただ、上記のソフトは仕事上必要なので、現状は大人しく実機デバックにしておきます。 まとまった時間が取れたら、ソフト入れながら動かせないか試してみようかと思います。
ようやくコーディングできそうです。
*1:FortiClient
Xamarin(Android)はじめました
Xamarinが無料化になったので、始めてみたいなと思い続けてはや2ヶ月 当初の熱が冷めてしまう前にと始めてみました。
今始めるならXamarin.Formsが流行りだとは思うんですが、
- 仕事と連動する可能性があるので、Xamarin.Formsで人柱になる勇気がない(汗)
- Xamarinネイティブでの開発もやってないのに、いきなりFormsとかいいのかと、若干ひよっている
との理由から、Xamarinネイティブで始めています。
Xamarin.iOSで始める予定だったんですが、 個人的な事情でMacの購入が先送りになったので、Xamarin.Androidで始めています。
本人の技術レベルです。
これらの状態で始めていますので、おかしなところ等あればお願いします( 一一)