きっかけ
Xamarin.Formsで開発したアプリがAndroidでQRコードリーダーを初回起動時に権限を許可するとアプリ自体がクラッシュするという不具合を修正した時の備忘録です。
原因
原因はZXing.Net.Mobile.Formsのバージョンが最新だとこの症状が出るバグみたいです。以下のページに書いてありました。
App crash after requesting camera permission #750
2.4.1(最新)をインストールした場合、初回時に許可が要求された後、スキャンを試みるが、スキャンはまったく実行されません。2回目はOKです。それは他の投稿でここに報告されたバグです。
との事。私の場合はパーミッションを要求された後、「OK」をクリックするとアプリがクラッシュしてしまいました。書いてある通りに初回時だけクラッシュして2回目からは普通にQRコードリーダーが使用できます。
これは一度、2.3.1で修正されましたが、2.4.1に再び出るようになりました。この問題を解決するには、ZXing.Net.Mobileのバージョン2.3.1をインストールしてみてください。
との事だったので、早速、自分の使っている 'ZXing.Net.Mobile.Forms'と 'ZXing.Net.Mobile'をチェックしたところやっぱり2.4.1の最新だったのでとりあえず2.3.1にダウングレード
そして、'ZXing.Net.Mobile.Forms'と'ZXing.Net.Mobile'をダウングレード しただけでは改善されないので、MainActivity.csのOnRequestPermissionsResult関数(Android6.0用パーミッション設定)を、
ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode、permissions、grantResults);
から
ZXing.Net.Mobile.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode、permissions、grantResults);
へ書き換える。 書き換える部分は'ZXing.Net.Mobile.Forms'の'.Forms'を消すだけ。すると無事に初回時起動時でも動作するようになりました。
まとめ
やはり日本語で書かれたドキュメントはほぼ公式のみで事例が少ないので原因が分かるまでTwitterで情報収集したり海外のサイトを見まくってやっと解決!
めっちゃ時間がかかってしまったし、結局、日本語で'ZXing.Net.Mobile.Forms'と'ZXing.Net.Mobile'のダウングレード を書いているサイトを見つけることができなかったので、今後もこう言う内容を備忘録として書いておこうと思った。(自分の記憶に全く自信なし!)
でも、結構、Twitterで色んな方に助けてもらえてすごく助かった!感謝!!
Xamarin初心者なので内容間違っているなどがあれば皆様、教えてくださいませ〜