在项目开发中需要使用到条码扫描,因为以前就测试过ZXing,感觉识别速度和功能都不错,所以直接引用。不过在实际开发的过程中,却遇到连续扫描的问题,每次扫描识别完成之后,扫描窗体自动关闭了。

在Xamarin论坛中查找解决方案,只是找到的iOS版本的解决方案。参考iOS的解决方案,其实就是在扫描完成之后重新打开扫描。按照这个思路,想到使用Intent for result的方式来进行实现。实现方法如下代码:

主窗体:

 using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using ZXing.Mobile; namespace imStudio.QRCodeLife
{
[Activity (Label = "imStudio.QRCodeLife", MainLauncher = true)]
public class MainActivity : Activity
{
int count = ; protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle); // Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main); // Get our button from the layout resource,
// and attach an event to it
var button = FindViewById<Button>(Resource.Id.myButton);
var tv = FindViewById<TextView>(Resource.Id.textView1); button.Click += async delegate
{
StartActivityForResult(typeof(CodeActivity),);
};
} protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if (requestCode == )
{
if (resultCode == Result.Ok)
{
FindViewById<TextView>(Resource.Id.textView1).Text += data.GetStringExtra("Code") + System.Environment.NewLine;
StartActivityForResult(typeof(CodeActivity), );
}
}
}
}
}

子窗体,增加一个“完成”或“取消”按钮,用于关闭扫码窗体,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget; namespace imStudio.QRCodeLife
{
[Activity(Label = "CodeActivity")]
public class CodeActivity : Activity
{
protected override async void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Create your application here
var scanner = new ZXing.Mobile.MobileBarcodeScanner(this);
scanner.UseCustomOverlay = true;
var zxingOverlay = LayoutInflater.FromContext(this).Inflate(Resource.Layout.Code, null);
var doneButton = zxingOverlay.FindViewById<Button>(Resource.Id.buttonZxingDone);
doneButton.Click += (sender, e) =>
{
scanner.Cancel();
SetResult(Result.Canceled);
Finish();
};
scanner.CustomOverlay = zxingOverlay;
var result = await scanner.Scan(); HandleScanResult(result);
} private void HandleScanResult(ZXing.Result result)
{
if (result != null)
{
Intent intent = new Intent();
intent.PutExtra("Code", result.Text);
SetResult(Result.Ok,intent);
Finish();
}
}
}
}

实现代码虽然有些粗糙,不过功能OK,先用着,回头再想有没有好的办法。

Xamarin开发Android笔记:使用ZXing进行连续扫描的更多相关文章

  1. Xamarin开发Android笔记:背景操作

    使用Xamarin开发Android UI的时可能会遇到一些场景背景的问题,虽然可以利用多层或直接使用图片背景来完成,但这样会增加不少的资源消耗,最终导致内存溢出的情况.最好的方法还是利用内部方法或代 ...

  2. Xamarin开发Android笔记:拍照或相册选取图片角度问题

    在开发Android应用的时候,可能会遇到类似微信朋友圈中拍照或相册选取图片的场景,拍照或选取图片之后在显示的时候却发现图片的角度不对,明明是竖版拍照,显示出来缺失躺着的. 这是因为在某些特定手机上例 ...

  3. Xamarin开发Android笔记:TextView行间距设定

    TextView 在使用TextView的时候会遇到调整行间距的问题,可通过Layout文件添加属性完成,具体属性如下: //设置行间距,如”3dp”. android:lineSpacingExtr ...

  4. Xamarin开发Android笔记:图片切换ImageSwitcher

    在移动应用开发过程中经常会使用到图片展示场景,例如利用多张图片说明一个产品的特点,此处就会使用到ImageSwithcher,当然也可以使用ViewFliper来实现,但使用ViewFliper的时候 ...

  5. Xamarin开发Android应用打包apk

    Visual Studio中用Xamarin开发Android应用,生成apk文件有3种方法 1.debug时,代码目录下bin\Debug中会自动生成调试用***-Signed.apk文件,但是文件 ...

  6. Xamarin Android教程如何使用Xamarin开发Android应用

    Xamarin Android教程如何使用Xamarin开发Android应用 在了解了Xamarin和Andriod系统之后,下面我们需要了解一下如何使用这些工具和系统来开发我们的应用程序. And ...

  7. 【Xamarin开发 Android 系列 13】 应用打包部署

    原文:[Xamarin开发 Android 系列 13] 应用打包部署 开始倒叙咯................ 先更新大宝部署吧,这个章节比较的Easy,童鞋们不用费脑筋.点解?从界面上填写几个参 ...

  8. 【Xamarin开发 Android 系列 7】 Android 结构基础(下)

    原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...

  9. 【Xamarin开发 Android 系列 5】 Xamarin 的破解

    原文:[Xamarin开发 Android 系列 5] Xamarin 的破解 有关这个话题,十分敏感,公司开发还是支持下商业版权吧,毕竟一帮猴子辛辛苦苦没日没夜的干活,不说开宝马奔驰,吃饭还是必须的 ...

随机推荐

  1. PHP-redis中文文档介绍(转自http://www.jb51.net/article/33887.htm)

    Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号t ...

  2. WPF 动态更换样式文件

    ApplySkinFromMenuItem("Style/BigImgStyle.xaml", "Style/FileListStyle.xaml"); //换 ...

  3. python自我输出源程序

    1.参考相应c程序 s='s=%s%s%s;print s%s(chr(39),s,chr(39),chr(37))';print s%(chr(39),s,chr(39),chr(37)) http ...

  4. extjs学习(关于grid)

    1.想要调整某一列在表格中的顺序,可以使用mapping(索引是从0开始的) var store = new Ext.data.ArrayStore({ data:data, fields:[ {na ...

  5. windows7安装python2.7及scrapy

    http://www.cnblogs.com/txw1958/archive/2012/07/12/scrapy_installation_introduce.html 第0步:当然是安装python ...

  6. Linux_arm驱动之按键模拟脉冲实现定时器的精确计时

    /***************************************************************** 内核驱动部分button_ker.c ************** ...

  7. JSP内置对象有哪些呢?

    内置对象 request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的 ...

  8. Gray Code

    Gray Code The gray code is a binary numeral system where two successive values differ in only one bi ...

  9. div 指令

    div 指令 div 是除法指令,后面跟的是除数,被除数默认在 ax, 或者 dx.ax 组成的存储单元中. 除数可以有 8 位和 16 位两种,存储于一个 reg 或内存单元中,也就是说不可以 di ...

  10. .net core Entity Framework Core Code First 框架 分层开发

    由于之前苦于无法把 Entityframework 跟Web层剥离.找了很久..找到了这个框架..分享给大家..  GitHub 地址:https://github.com/chsakell/dotn ...