All Projects → githubRonda → BarcodeScanner

githubRonda / BarcodeScanner

Licence: other
扫码枪扫码

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to BarcodeScanner

Swiftscan
A barcode and qr code scanner( 二维码/条形码扫描、生成,仿微信、支付宝)
Stars: ✭ 293 (+713.89%)
Mutual labels:  barcode, scan
r scan
📷🖨Flutter二维码&条形码扫描插件,支持相机、文件、链接、Uint8List类型扫描
Stars: ✭ 108 (+200%)
Mutual labels:  barcode, scan
barcode scan2
[reborned barcode_scan] A flutter plugin for reading 2D barcodes and QR codes.
Stars: ✭ 43 (+19.44%)
Mutual labels:  barcode, scan
Jsprintmanager
Advanced Client-side Printing & Scanning Solution for Javascript
Stars: ✭ 74 (+105.56%)
Mutual labels:  barcode, scan
Swiftscan
A barcode and qr code scanner( 二维码 各种码识别,生成,界面效果)
Stars: ✭ 1,349 (+3647.22%)
Mutual labels:  barcode, scan
Nbzxing
🔥 2020年最好用的开源扫码,全方位优化,强烈推荐!! 支持多种常规zxing无法扫出的码,用就完了!! 🔥
Stars: ✭ 184 (+411.11%)
Mutual labels:  barcode, scan
Zxinglite
🔥 ZXing的精简版,优化扫码和生成二维码/条形码,内置闪光灯等功能。扫描风格支持:微信的线条样式,支付宝的网格样式。几句代码轻松拥有扫码功能 ,ZXingLite让集成更简单。(扫码识别速度快如微信)
Stars: ✭ 2,117 (+5780.56%)
Mutual labels:  barcode, scan
Flutter barcode scanner
Barcode scanner plugin for flutter. Supports barcode scanning for Android and iOS
Stars: ✭ 194 (+438.89%)
Mutual labels:  barcode, scan
escpos-coffee-samples
anastaciocintra.github.io/escpos-coffee
Stars: ✭ 29 (-19.44%)
Mutual labels:  barcode
checkweb
Identificador de Seguridad Web para Pentester
Stars: ✭ 19 (-47.22%)
Mutual labels:  scan
BarcodeReader
Simple multi-format barcode reader for Windows
Stars: ✭ 26 (-27.78%)
Mutual labels:  barcode
ESCPOS
A ESC/POS Printer Commands Helper
Stars: ✭ 26 (-27.78%)
Mutual labels:  barcode
glide-barcode
GlideBarcode is an open-source barcode loading extension for Android Glide that wraps barcode generating and displaying.
Stars: ✭ 24 (-33.33%)
Mutual labels:  barcode
inventory
Use a barcode reader to scan the foods in your house and add them to a database. See legacy for zbarcam integration. Master integrates with a USB barcode laser scanner.
Stars: ✭ 32 (-11.11%)
Mutual labels:  barcode
ad-password-self-service
基于Python 3.8 + Django 3.2的密码自助平台,AD用户自助修改密码,结合<钉钉>/<企业微信>扫码验证信息后用户可自行重置密码、解锁自己的账号。
Stars: ✭ 76 (+111.11%)
Mutual labels:  scan
react-native-smart-code
Support React & ReactNative.In react-native,it's create base64 String,which is qrcode or barcode ,and without webview.In react,we use jsbarcode.
Stars: ✭ 14 (-61.11%)
Mutual labels:  barcode
kubexray
JFrog KubeXray scanner on Kubernetes
Stars: ✭ 22 (-38.89%)
Mutual labels:  scan
escpos-coffee
Java library for ESC/POS printer
Stars: ✭ 172 (+377.78%)
Mutual labels:  barcode
dart barcode
Barcode generation library
Stars: ✭ 79 (+119.44%)
Mutual labels:  barcode
PSnmap
Svendsen Tech's PowerShell nmap-like port scanner accepting IPv4 CIDR notation
Stars: ✭ 37 (+2.78%)
Mutual labels:  scan

扫码枪扫码功能(扫商品条码,支付条码等)

因为扫码枪就相当于外部输入设备(和键盘一样),所以就是监听按键输入事件(或者按键回调事件),然后获取这些输入的字符,最后拼接在一起就是一个完整的条码

两种思路:

  1. 在 Activity 中的 dispatchKeyEvent()/onKeyDown() 回调事件中,捕获按键事件KeyEvent
  2. 使用无障碍服务AccessibilityService,在后台实现按键监听,也是onKeyEvent() 回调方法中 (有使用条件)

BarcodeScannerResolver(扫码枪事件解析类)

使用说明:

  • 在Activity中先创建BarcodeScannerResolver对象,并设置扫码成功监听器: setScanSuccessListener() [一般在onCreate()方法中初始化]
  • 接着在Activity#dispatchKeyEvent() 或者 Activity#onKeyDown() 中调用本类中的resolveKeyEvent()方法。当扫码结束之后,会自动回调第一步设置的监听器中的方法

原理分析:

  1. 扫码枪就是一个外部的输入设备(和键盘一样)。扫码的时候,就是在极短的时间内输入了一系列的数字或字母
  2. 这样就可以在键盘事件中抓捕这些输入的字符,但是又会产生一个问题(快速扫两次的情形):在键盘事件中应该抓捕多少个字符呢?即一个条码应该在哪个位置结束呢? (有的扫码枪会以一个回车或者换行作为一次扫码的结束符,但是有的就纯粹的是一系列的条码。这个得需要设置)

所以为了兼容性,应当是当短时间内不再输入字符的时候,就表示扫码已结束。这样只能定性描述,不能定量,只能自己在程序中用一个具体的数字来表示这个“短时间”,eg:500ms。(如果每个条码结束的时候都有一个结束符那该多好,直接判断这个结束符,就可以知道当前扫码已完成) 接下来就产生了BarcodeScannerResolver这个类。

核心原理就一句话:在Activity的键盘监听事件中,每抓捕到一个字符的时候,就先向 Handler 一次一个runnable对象,再延迟500ms发送一个runnable. 这样若两个输入字符的间隔时间超过了500ms,则视为两次扫码

后台无障碍服务AccessibilityService(也是Service的一种)实现按键监听的功能:

可以一直在后台运行,监听按键功能。

  • 对于扫码输入监听,使用 AccessibilityService 则有点大材小用了。因为我们的扫码功能只在特定的某些页面才有,所以只需要在这些Activity中的按键事件的回调方法中捕获输入的字符即可。
  • 而无障碍服务 AccessibilityService 来实现按键监听,则一般用于机顶盒或者智能电视,也就是AndroidTv。针对遥控器某些特殊按键,实现按键的监听,并实现相应的功能。 当然 AccessibilityService 的功能很强大,远不止按键监听这一项。

参考:http://blog.csdn.net/w815878564/article/details/53331086

启动:AccessibilityService 的方法:(要注意:用户应用的话,下面这种方式是启动不了的,只用系统级的应用才可以用下面这种方式启动。若系统是自己开发的话,可以直接把签名应用(要和系统的签名是一样的)放到/system/framework/目录下即可成为系统级应用) 用户级应用只用这样启动:设置 --> 辅助功能 --> 选择服务进行开启/关闭

//代码启动AccessibilityService(只适用于系统级应用)
private void startKeyEventService(){
    //注意 这里可能为空(也就是如果当前没有任何一个无障碍服务被授权的时候 就为空了 )
    String enabledServicesSetting = Settings.Secure.getString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);

    ComponentName selfComponentName = new ComponentName(getPackageName(), "com.ronda.barcodescanner.KeyEventService");
    String flattenToString = selfComponentName.flattenToString();
    if (enabledServicesSetting == null || !enabledServicesSetting.contains(flattenToString)) {
        enabledServicesSetting += flattenToString;
    }
    Settings.Secure.putString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, enabledServicesSetting);
    Settings.Secure.putInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED, 1);
}

使用 AccessibilityService 的要点:

  • AndroidManifest.xml 中的声明(除了android:name属性,其他都是固定的写法)

      <service
          android:name=".KeyEventService"
          android:enabled="true"
          android:exported="true"
          android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
          <intent-filter>
              <action android:name="android.accessibilityservice.AccessibilityService"/>
          </intent-filter>
          <meta-data
              android:name="android.accessibilityservice"
              android:resource="@xml/accessibilityservice"/>
      </service>
    
  • accessibilityservice.xml 的写法(基本形式如下)

      <?xml version="1.0" encoding="utf-8"?>
      <accessibility-service
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:accessibilityEventTypes="typeAllMask"
          android:accessibilityFeedbackType="feedbackGeneric"
          android:accessibilityFlags="flagRequestFilterKeyEvents"
          android:canRequestFilterKeyEvents="true"
          android:canRetrieveWindowContent="true"
          android:description="@string/service_name"
          android:packageNames="com.ronda.barcodescanner"
          >
      </accessibility-service>
    

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].