1. 程式人生 > >最完善,快速的 react-native 二維碼掃描

最完善,快速的 react-native 二維碼掃描

react-native 二維碼掃描
先看效果

使用的開源庫
安裝
    npm install react-native-smart-barcode --save
    npm install react-native-smart-timer-enhance --save

IOS配置

1.將\node_modules\react-native-smart-barcode\ios\RCTBarcode\RCTBarCode.xcodeproj 新增到Xcode專案中,如下圖:

2.新增依賴,Build Phases->Link Binary With Libraries 加入RCTBarCode.xcodeproj\Products\libRCTBarCode.a(直接拖),如下圖:

3.確定一下Build Settings->Seach Paths->Header Search Paths是否有$(SRCROOT)/../../../react-native/React
若是沒有就新增 並且設為recursive

4.將\node_modules\react-native-smart-barcode\ios\raw 資料夾拖到到Xcode專案中(確保資料夾是藍色的),如下圖:

5.在info.plist新增相機許可權 Privacy - Camera Usage Description:

react-native 程式碼

import React, {
    Component,
} from 'react'
import {
    View,
    StyleSheet,
    Alert,
} from 'react-native'

import Barcode from 'react-native-smart-barcode'
import TimerEnhance from 'react-native-smart-timer-enhance'

class BarcodeTest extends Component {

    // 構造
    constructor(props) {
        super(props);
        // 初始狀態
        this.state = {
            viewAppear: false,
        };
    }

    render() {

        return (
            <View style={{flex: 1, backgroundColor: 'black',}}>
                {this.state.viewAppear ? <Barcode style={{flex: 1,}}
                                                  ref={component => this._barCode = component}
                                                  onBarCodeRead={this._onBarCodeRead}/> : null}
            </View>
        )
    }

    componentDidMount() {

        this.setState({
            viewAppear: true,
        })
        // let viewAppearCallBack = (event) => {
        //     this.setTimeout(() => {
        //         this.setState({
        //             viewAppear: true,
        //         })
        //     }, 255)
        //
        // }
        // this._listeners = [
        //    // this.props.navigator.navigationContext.addListener('didfocus', viewAppearCallBack)
        // ]

    }

    componentWillUnmount() {
        this._listeners && this._listeners.forEach(listener => listener.remove());
    }

    _onBarCodeRead = (e) => {
        console.log(`e.nativeEvent.data.type = ${e.nativeEvent.data.type}, e.nativeEvent.data.code = ${e.nativeEvent.data.code}`)
        this._stopScan()
        Alert.alert(e.nativeEvent.data.type, e.nativeEvent.data.code, [
            {text: 'OK', onPress: () => this._startScan()},
        ])
    }

    _startScan = (e) => {
        this._barCode.startScan()
    }

    _stopScan = (e) => {
        this._barCode.stopScan()
    }

}

export default TimerEnhance(BarcodeTest)

附原文

android 配置

1 在android/settings.gradle檔案中:

    include ':react-native-smart-barcode'
    project(':react-native-smart-barcode').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-smart-barcode/android')

2 在android/app/build.gradle檔案中:

dependencies {
    ...
    // 在這裡新增
    compile project(':react-native-smart-barcode')
}

3 在MainApplication.java檔案中(這裡官方上面有錯誤,在這裡修改一下):

...
//將原來的程式碼註釋掉,換成這句
private ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    //  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    protected boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
              //直接在這裡新增
              new RCTCapturePackage()
      );
    }
  };
  //新增
  public void setReactNativeHost(ReactNativeHost reactNativeHost) {
    mReactNativeHost = reactNativeHost;
  }

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }
...

4.在AndroidManifest.xml檔案中新增相機許可權:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>

可能會遇到的問題
image.png
這是因為react-Native 0.48後被移除了 PropTypes 所以在專案上重新匯入PropTypes
匯入方式是
import PropTypes from ‘prop-types’;
圖示如下
image.png

參考
原始碼地址
關注公眾號獲取更多內容

相關推薦

完善,快速react-native 掃描

react-native 二維碼掃描 先看效果 使用的開源庫 安裝 npm install react-native-smart-barcode --save npm install react-native-smar

React Native 掃描元件(簡單,易用!)

1前言 最近用 React Native 仿寫了一下 ofo 應用,涉及到了二維碼掃描的功能,在 github 上搜了一下,也沒發現一個趁手的二維碼掃描元件,所以乾脆自己動手寫了一個。 其中使用攝像頭實時掃描二維碼進行解析的功能,已經通過 react-native-camera 這個庫實現了,所以我也只是寫

自定義 React Native 掃描元件(簡單,易用!)

本文為 Marno 原創,轉載必須保留出處! 公眾號 aMarno,關注後回覆 RN 加入交流群 1.前言 最近用 React Native 仿寫了一下 ofo 應用,涉及到了二維碼掃描的功能,在 github 上搜了一

React Native 掃描 react-native-camera的使用

npm install [email protected]://github.com/lwansbrough/react-native-camera.git --savereact-native link react-native-camera import

React Native實現掃描

依賴包匯入步驟 詳細步驟可看github上的說明,簡要記錄如下: 1. npm install react-native-camera –save 2. react-native link react-native-camera android手動l

react-native-smart-barcode目前最好用的掃描元件(IOS、android)

最近在製作React-Native專案的時候,條碼識別給我們整個專案帶了不少麻煩,幾款主流的條碼識別元件都不是特別好用,使用者體驗比較差,比如二維碼識別速度慢、掃描頁面十分卡頓用等一系列問題,後來在網上無意間找到一個非常好用的二維碼掃描元件——react-native-smart-barcode,這個元件是

利用Google API快速生成QR

int char 利用 utf return 包含 尺寸 ret pre //laravel public function index(){ $urlToEncode="http://www.baidu.com"; $this ->

jQuery和react實現

jq如何生成二維碼   程式碼如下: 1.jquery.qrcode生成二維碼程式碼 <!DOCTYPE html> <html> <head>   <script charset='utf-8' type='text/javascript' src=

Github專案解析(十)-->幾行程式碼快速整合掃描

上一篇文章中我們講解了activity切換動畫相關的知識點,這裡的切換動畫指的是是activity跳轉時的動畫效果。在上一篇文章中我們總結了有五種方式實現activity切換時實現動畫效果。並且依次的介紹一下每種實現activity切換動畫效果的實現方式,以

IOS 使用 ZbarSDK 掃描

fill 下載 src uitext void del symbols per super 1. 下載SDK https://github.com/bmorton/ZBarSDK 2. 引用到項目中 3. 添加引用 4. AppDelegate中添加下面代碼 5.

ZBar 是款桌面電腦用條形碼/掃描工具

進行 output app 新版本 import 系統安裝 安裝文件 window eating ZBar 是款桌面電腦用條形碼/二維碼掃描工具 windows平臺python 2.7環境編譯安裝zbar 最近一個項目需要識別二維碼,找來找去找到了zbar和zxin

Swift AVFoundation 掃描和生成

size ram post nserror out 捕獲 一個 白色 art 項目最終不須要支持iOS6了(淚崩),在二維碼掃描這一塊,可以全然的放棄ZXing庫,改用系統的AVFoundation了,拿swift寫了個Demo,效果例如以下: git

Zxing掃描

ram zxing oss lean 預覽 surface ott serial pac 源代碼地址 有問題能夠加QQ:312122330 之前對於Zbar的二位碼掃描。到項目上線以後才發現掃描過於靈敏。導致有時候掃描到半截就啟動了。 後來翻看ZXIN

iOS掃描

ont 代碼 畫面 告訴 nds ima dds rst bounds 每一步:添加 AVFoundation.framework 庫 General > Linked Frameworks and Libraries 第二步:代碼集成 #import "V

基於Zxing的掃描之橫屏掃描

ews name pla eight 網上 HA 如果 log 簡單的 最近項目條碼掃描要改為橫屏,網上所搜了一下,然後發現我寫的需要改動幾行代碼就可以了,還是很給力的。 如未查看之前的代碼,請移步: 基於Zxing的二維碼生成和二維碼掃描 修改下面寫代碼就可以實現橫

關於掃描的開發,遇到的問題,以及最終結果

無效 () 我不 ont 操作 res 手機 clas 什麽 近期發現之前我使用的zxing二維碼掃描速度較慢,自己不是很滿意,但是找了很久沒有好的優化方式,研究了一段時間(與其說是研究,不如說找相關資料改某動) 這裏有如下幾點內容需要註意下面也是我二維碼優化之旅遇到的問題

集成默認的掃描頁面

定義 color nio tco android nac create toa new 1.在module的build.gradle中執行compile操作 compile ‘cn.yipianfengye.android:zxing-library:2.2‘ 2.在d

iOS 原生掃描

oca lac sig mediatype gate 5.0 項目 machine lec 直接上項目代碼 首先檢查相機權限 AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusFo

掃描登陸的原理及深入解析

一、單方掃描登陸   基本的實現流程:  PC端開啟login.html,ajax請求passport.wx.com?appid=123&redirect_uri=monitor.wx.com,服務端響應帶有uuid=456和狀態碼200的內容,再次發起兩個aj

掃描框架zxing的使用

目前二維碼掃描功能在app上已經非常成熟了,google的zxing專案也是目前可以說是最流行的二維碼掃描框架。但是它本身功能太多,這裡我提取出一些基本的掃碼功能,重新封裝成庫。 github:https://github.com/Sun-Shuai/zxing-demo 使用方法: