热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phonegap安卓环境下使用BarcodeScanner插件扫描二维码教程(包含PG3.X版本)

121915-增加github项目地址如果你想直接扫描二维码的源代码,可以点击这里,注意此版本是Phonegap2.9.0版本https:github.comxuwenzh

12/19/15-增加github项目地址

如果你想直接扫描二维码的源代码,可以点击这里,注意此版本是Phonegap2.9.0版本

https://github.com/xuwenzhi/QRcodeByPhonegap


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


后记:有网上的朋友说PG到了3.X之后文件夹的规划有了变化,需要配置的地方也发生了变化,因为之前也为PG3.5版本装过一次BarcodeScanner插件,所以现将这些补充到最后面,希望能够帮到大家。



由于一直在使用phoneGap来开发安卓应用,而对于原生Java小白的我最近这几天一直陷入了如何使用phonegap的BarcodeScanner插件这件事情上,可以说查遍了百度和Google,虽然只是一个小小的二维码的功能,但是这里面还是让我学到了许多开发安卓应用的内容,一起共勉吧。


首先,告诉大家的是

1、我使用的phonegap版本是2.9.0,当然对于phonegap版本的东西我也不太了解,不过可以保证的是phonegap2.0.0之后的按照我这种办法来实现二维码是没有问题的。

2、phonegap的插件都是放在github上托管的,大家可以Google一下或者到http://www.github.com搜索下载


下载插件之后是这样名字的压缩包


解压之后会看到


这里面最最重要的东西在 src 文件夹中



图片中划红线的文件可以说是有很多学问在里面了,我们在开发任何项目的时候都会将一些公用的文件封装好,然后就可以在任何地方使用,而这种思想在开发Android应用的时候同样适用,只不过在Android这里这种思想有一个名字叫做 Android Library,也就是图片这个LibraryProject就是已经给我们提供好的一个实现二维码的Android Library,但是这样的文件夹我们又不能直接拿来用,我们需要在ADT当中将这个LibraryProject引入到我们的一个公共二维码项目中去,具体的安装方法,查看 http://www.yelanxiaoyu.com/app/android%E5%BC%80%E5%8F%91/%E5%A6%82%E4%BD%95%E6%B7%BB%E5%8A%A0android-library.html



好了,当你已经将这个LibraryProject加入到项目中去后,结果会是这个样子的




还是重申一遍,这个叫做CaptureActivity的项目作为一个实现二维码功能的公共项目存在,我可以在Project1中使用这个CaptureActivity,也可以在Project2中使用这个CaptureActivity,也就是它作为一个公共项目存在,在其他项目中可以随时使用它。





接下来就开始看我们如何来实现二维码功能了,首先新建一个项目,比如叫做QRcode



将安卓项目配置成phonegap项目,引入phonegap-x.x.x.jar xml文件夹 phonegap-x.x.x.js,具体的操作步骤可以查看我的另一篇文章,当然这里说的有点多余。



配置完成之后是这个样子的



START#############################################



然后将CaptureActivity引入,右键QRcode项目,看到properties,点击左侧Android,右侧下面有个add,会看到之前已经引入的CaptureActivity,(isLibrary一定不要点),点击OK。






将下载下来的文件夹中的这些内容移动到项目目录中去,看下图



这个BarcodeScanner.java会报错,

报错1: 

将这行代码改为 package com.example.qrcode; 即可,也就是


报错2:

解决办法很简单,按住Ctrl+shift + o 就可以将需要的包导进来了,这下就不会有错误了。





也差不多接近尾声了,需要配置一个非常重要的东西,叫做 AndroidManifest.xml,在它的标签中添加如下代码

	
  
    
    
  


  
    
    
  


    
            
        
    


这里的配置也就是使用外部CaptureActivity那个公共项目的关键,当然还需要在Manifest中写入权限,将


    
    
    
    
    
    
    
    
    
    
       
       
    
    
    

    
    

加入到之后


END###############################################





配置res/xml/config.xml文件,在标签中添加

  

其中com.example.qrcode也就是 ,之后的BarcodeScanner也就是那个引入的Java文件。





START#############################################

具体的配置过程就完成了,接下来需要通过JS来使用了,在assets文件中有个www文件夹(没有的创建一下),将phone-x.x.x.js和 下载下来的文件夹中的barcodescanner.js引入到www文件夹中,实际上下载下来的这个barcodescanner.js是用不了的,我把我的这个JS文件贴到这里,可以复制之后然后自己新建一个barcodescanner.js


barcodescanner.js

/**
 * cordova is available under *either* the terms of the modified BSD license *or* the
 * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 *
 * Copyright (c) Matt Kane 2010
 * Copyright (c) 2011, IBM Corporation
 */

cordova.define("cordova/plugins/barcodescanner", 
  function(require, exports, module) {
    var exec = require("cordova/exec");
    var BarcodeScanner = function() {};
    
    //-------------------------------------------------------------------
    BarcodeScanner.prototype.scan = function(successCallback, errorCallback) {
        if (errorCallback == null) { errorCallback = function() {}}
    
        if (typeof errorCallback != "function")  {
            console.log("BarcodeScanner.scan failure: failure parameter not a function");
            return
        }
    
        if (typeof successCallback != "function") {
            console.log("BarcodeScanner.scan failure: success callback parameter must be a function");
            return
        }
    
        exec(successCallback, errorCallback, 'BarcodeScanner', 'scan', []);
    };
    
    //-------------------------------------------------------------------
    BarcodeScanner.prototype.encode = function(type, data, successCallback, errorCallback, options) {
        if (errorCallback == null) { errorCallback = function() {}}
    
        if (typeof errorCallback != "function")  {
            console.log("BarcodeScanner.scan failure: failure parameter not a function");
            return
        }
    
        if (typeof successCallback != "function") {
            console.log("BarcodeScanner.scan failure: success callback parameter must be a function");
            return
        }
    
        exec(successCallback, errorCallback, 'BarcodeScanner', 'encode', [{"type": type, "data": data, "options": options}]);
    };
    
    var barcodeScanner = new BarcodeScanner();
    module.exports = barcodeScanner;

});

cordova.define("cordova/plugin/BarcodeConstants", 
    function(require, exports, module) {
    module.exports = {
        Encode:{
            TEXT_TYPE: "TEXT_TYPE",
            EMAIL_TYPE: "EMAIL_TYPE",
            PHONE_TYPE: "PHONE_TYPE",
            SMS_TYPE: "SMS_TYPE",
        }
    };        
});
//-------------------------------------------------------------------
var BarcodeScanner = cordova.require('cordova/plugin/BarcodeConstants');

if(!window.plugins) {
    window.plugins = {};
}
if (!window.plugins.barcodeScanner) {
    window.plugins.barcodeScanner = cordova.require("cordova/plugins/barcodescanner");
}



需要的配置和文件都已经准备好了,接下来需要建立一个index.html文件来使用扫描二维码了,很兴奋噢!!

index.html







hello 二维码!






END###############################################






解决BarcodeScanner显示二维码时横屏问题

答:深度Google了一会儿,也试了很多方法,看到有很多人说现在BarcodeScanner现不支持竖屏,而且官方源码中也是有说明

// We're landscape-only, and have apparently seen issues with display thinking it's portrait 
    // when waking from sleep. If it's not landscape, assume it's mistaken and reverse them:
在stackover上看到一个性价比算是比较高的问答 http://stackoverflow.com/questions/10216943/android-zxing-change-orientation-to-portrait

不过我也找到了一个办法可以实现竖屏,但是这样的办法只是实现了取景框以及二维码扫描框下方的文字显示为竖屏,但是摄像头中显示的图像是歪的尴尬,有需要的可以看看,在项目的Manifest.xml中做一下修改,将


  		
    	
    	
  		
	
	
 	 
    	
    	
 	 
	
	
  	  
            
    	    
   	 
	

修改成


  		
    	
    	
  		
	
	
 	 
    	
    	
 	 
	
	
  	  
            
    	    
   	 
	






PG3.5之后的版本如何配置?

因为从2.9.0以后,phonegap官网就已经不提供库的下载了,所以大家都是通过nodejs来配置,但是本人从没有接触过这种配置方法,前一段时间偶然得到了一个PG3.5的通过nodejs获取的文件夹,例如


会发现文件结构已经完全不同了,当然我对于这个也只是个小白,对于3.X版本没有过多的了解,进入主题,还是实现BarcodeScanner插件。


①将通过nodejs建立好的项目引入到ADT中,这个接触过phonegap3.X同学们应该了解,首先将已存在项目引入


选择hello文件夹(也就是通过nodejs生成后的文件夹)



引入后的效果就是这样,将src包中的.java主文件配置成phonegap模式就好


Note:右侧黄框中的代码部分中是wwww文件夹,所以要在assets文件夹中新建一个wwww文件夹,当然不是一定要4个'W',3个'W'也是可以的。


②请参考上面的紫色 '#' 的部分,因为只是版本的变更问题,有些东西有变化,但是有些东西还是没有变化的

请参考

START####这里的内容END#####

部分


配置完成之后是这个样子


③如果到了这里,说明你已经配置完成了Manifest,接下来就是配置config.xml,细心的你会发现其实config.xml之前不是在这个位置的,原来是在res/xml文件夹下的,所以这里就是一个变化

打开config.xml,长的其实和以前也不一样了,主要是新版本的phonegap希望能够让开发者可以自己有效定制自己需要的功能。



然后对它做一下小小的修改




④基本的配置已经完成了,所以接下来将要添加HTML等等的内容了,这里还是从上面Copy

从上面的

STRAT####      这里的内容噢        END####





⑤RUN

中间来完成接下来的配置,然后RUN,如果不出问题的话,会执行成功的。


Note:非常抱歉的说,这次配置其实并没有通过手机来测试,如果您有问题可以留言。






如果您还是有问题,可以留言噢。。



转载请注明出处:http://blog.csdn.net/u014646984/article/details/25655725


推荐阅读
  • android ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
  • Jmeter对RabbitMQ压力测试
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Jmeter对RabbitMQ压力测试相关的知识,希望对你有一定的参考价值。Jm ... [详细]
  • 图片添加二维码水印教程
    本博客介绍一下用jdkawt实现图片加文字水印和图片水印的方法一、图片文字水印原来图片加上文字水印后图片二、图片加图片水印原来图片:水印图片:添加水印后的图片: ... [详细]
author-avatar
怡智俊婷珮婷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有