Xamarin开发Android笔记:使用ZXing进行连续扫描

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

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

主窗体:

 1 using System;
 2 using Android.App;
 3 using Android.Content;
 4 using Android.Runtime;
 5 using Android.Views;
 6 using Android.Widget;
 7 using Android.OS;
 8 using ZXing.Mobile;
 9
10 namespace imStudio.QRCodeLife
11 {
12     [Activity (Label = "imStudio.QRCodeLife", MainLauncher = true)]
13     public class MainActivity : Activity
14     {
15         int count = 1;
16
17         protected override void OnCreate (Bundle bundle)
18         {
19             base.OnCreate (bundle);
20
21             // Set our view from the "main" layout resource
22             SetContentView (Resource.Layout.Main);
23
24             // Get our button from the layout resource,
25             // and attach an event to it
26             var button = FindViewById<Button>(Resource.Id.myButton);
27             var tv = FindViewById<TextView>(Resource.Id.textView1);
28
29             button.Click += async delegate
30             {
31                 StartActivityForResult(typeof(CodeActivity),1);
32             };
33         }
34
35         protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
36         {
37             if (requestCode == 1)
38             {
39                 if (resultCode == Result.Ok)
40                 {
41                     FindViewById<TextView>(Resource.Id.textView1).Text += data.GetStringExtra("Code") + System.Environment.NewLine;
42                     StartActivityForResult(typeof(CodeActivity), 1);
43                 }
44             }
45         }
46     }
47 }

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

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,先用着,回头再想有没有好的办法。

时间: 2024-10-13 17:14:37

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

Xamarin开发Android时Visual Studio 2012没有智能提示解决办法

Most of the people who work with Xamarin’s Mono for Android in Visual Studio 2012 face a bug where Intellisense doesn’t work for AXML in source view. One of the fix which worked for me is mentioned below. Launch Visual Studio 2012 Open a solution wit

Xamarin开发Android应用打包apk

Visual Studio中用Xamarin开发Android应用,生成apk文件有3种方法 1.debug时,代码目录下bin\Debug中会自动生成调试用***-Signed.apk文件,但是文件Size非常大,不建议使用. 2.Release时,“部署”勾选√,生成--部署解决方案后,代码目录下bin\Release中会自动生成部署用***-Signed.apk文件,文件Size比较小. 3.自己打包,工具--Publish Android Application,一步一步设置打包,文件S

【Xamarin开发 Android 系列 6】 Android 结构基础(上)

前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android 基础知识 一文里,开篇就上图,展示了Android的架构. 大概也就4层 APP--应用程序层 Framework --公共架构层 Native Libs + Dalvik VM---系统类库+虚拟机 Linux Kernel--Linux内核 Android 是一个基于Linux开发的可以运行在智能手机 平板电脑设备上 的系统.如 Android4.0 基于的是Linux2.6 内

C#使用Xamarin开发Android应用程序 -- 系列文章

Xamarin开发Android应用程序 利用Xamaria构建Android应用-公交发车信息屏 Xamarin版的C# SVG路径解析器 C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码 为 Xamarin.Forms 做个跑马灯控件 [Xamarin挖墙脚系列:现有IPhone/IPad 设备尺寸] [Xamarin挖墙脚系列:IOS-关于手机支持的屏幕方向] [Xamarin挖墙脚系列:Xamarin.IOS机制原理剖析] [Xamarin挖墙

xamarin开发android收集的一些工具

xamarin开发android收集的一些工具 工欲善其事,必先利其器,从16年下半年开始做xamarin相关的开发,平时使用的一些工具和google插件给大家分享一下,都有下载地址,持续更新. Visual Studio Emulator for Android 通过 Visual Studio 实现最佳Android模拟器(微软家的) Genymotion Android模拟器(google家的) Xamarin Live Player xamarin开发android.ios实时预览器 C

【Xamarin开发 Android 系列 2】VS2015跨平台开发的几种方式

在微软Build大会上,微软宣布在VS2015中支持三种方式进行跨平台的开发. 1. Xamarin 2. Cordova 3. C++ Xamarin  官网 :http://xamarin.com/ Xamarin 是由早期的Mono项目演变而来,原本是在Linux上执行C#程序的一个开放原始码项目.后来陆续发表支持iOS的Mono Touch framework以及Mono For Android Framework.因此它在市场上并不是一个新的产品.2011年,原本在Novell的Mon

利用HTML5开发Android笔记(上篇)

资源来自于www.mhtml5.com 杨丰盛老师成都场的PPT分享 一个很简明的demo 可以作为入门基础 学习的过程中做了点笔记 整理如下 虽然内容比较简单 但是数量还是比较多的 所以分了3篇 (上)包括Android设备多分辨率的问题,Android中构建HTML5应用程序基础 (中)包括Android与JS之间的互动,Android处理JS的警告对话框等,Android中的调试 (下)包括本地储存在Android中的应用,地理位置的应用,离线应用的构建 —————————————————

利用HTML5开发Android笔记(下篇)

资源来自于www.mhtml5.com 杨丰盛老师成都场的PPT分享 一个很简明的demo 可以作为入门基础 学习的过程中做了点笔记 整理如下 虽然内容比较简单 但是数量还是比较多的 所以分了3篇 (上)包括Android设备多分辨率的问题,Android中构建HTML5应用程序基础 (中)包括Android与JS之间的互动,Android处理JS的警告对话框等,Android中的调试 (下)包括本地储存在Android中的应用,地理位置的应用,离线应用的构建 —————————————————

利用HTML5开发Android笔记(中篇)

资源来自于www.mhtml5.com 杨丰盛老师成都场的PPT分享 一个很简明的demo 可以作为入门基础 学习的过程中做了点笔记 整理如下 虽然内容比较简单 但是数量还是比较多的 所以分了3篇 (上)包括Android设备多分辨率的问题,Android中构建HTML5应用程序基础 (中)包括Android与JS之间的互动,Android处理JS的警告对话框等,Android中的调试 (下)包括本地储存在Android中的应用,地理位置的应用,离线应用的构建 —————————————————