OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); (requestCode == 1 && resultCode == Result.Ok) { webView.LoadUrl(data.GetStringExtra()); Toast.MakeText(+ data.GetStringExtra(), ToastLength.Short).Show(); } }
大家可以看到,上面我们有一个判断requestCode==1,这个1就是我们传递过去的第二个参数.
当你有多个跳转界面的时候,就可以用这个requestCode来区分.
这样,我们就完成了界面的跳转和获取返回值
3.学会如何识别相机预览中的二维码,并读取下面我们讲讲如何读取相机中的二维码.
.Net解析二维码,在我的知识储备里面...常用的只有2个库,一个是QRCode,一个是ZXing.Net.(PS:如果有大神知道更好的,请留言赐教..)
很遗憾QRCode,使用的是GDI+ 也就是System.drawing..很明显..我们在手机端..调用不到..
所以只能用ZXing.Net
我们在nuget中搜索ZXing.Net.
如图:
类型很多..而且有各种版本..我们选择ZXing.Net.Mobile,
当然这里还有个ZXing.Net.Mobile.Forms,这个是封装好的二维码扫描控件..本文主要是学习,所以不使用(当然..你主要是实现功能..就用这个..巨人的肩膀上 多刺激..).
我们首先定义一个方法CodeDecoder来专门解析二维码,代码如下:
二维码解码 CodeDecoder(byte[] data,int width,int height) { byte[] bytes = data;//获取图片字节 //设置位图源 PlanarYUVLuminanceSource source = , ); //处理像素值内容信息 BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); //初始化解析器 ZXing.Reader reader = new QRCodeReader(); //解析位图 ZXing.Result result = reader.decode(bitmap); if (result == null) return null; return result.Text;//返回解析结果 }
前面我们说过了.OnPreviewFrame()是照相机预览的回调.所以我们现在就来实现他.
代码如下:
public void OnPreviewFrame(byte[] data, Android.Hardware.Camera camera) { try { previewWidth = camera.GetParameters().PreviewSize.Width; previewHeight = camera.GetParameters().PreviewSize.Height; date = CodeDecoder(data, previewWidth, previewHeight); (date != null) { //跳转回主页面 Intent intent = new Intent(this, typeof(MainActivity)); //放入一个key 为code 的解析后的值 intent.PutExtra(, date); //状态设为OK SetResult(Android.App.Result.Ok, intent); //关闭当前界面 Finish(); } } catch (IOException) { } }
上面的代码,if中的代码就是如何跳转回主界面,并且传递返回值.
最后我们用百度的网址,生成一个二维码,调试,扫描..就是前面的效果图拉~
写在最后
感觉很多东西..其实基本和JAVA都是一样的..
所以不要抱怨Xamarin的资料少..你能查到相关的JAVA资料..基本也就搞定Xamarin了..