1.0.2 • Published 5 years ago

react-native-barcode-wanmi v1.0.2

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

react-native-barcode-scan

npm npm

A barcode scanner component for React Native app. The library uses https://github.com/zxing/zxing to decode the barcodes for android, and also supports ios.

Installation

npm install react-native-barcode-scan --save

Installation (iOS)

  • Drag RCTBarCode.xcodeproj to your project on Xcode.

  • Click on your main project file (the one that represents the .xcodeproj) select Build Phases and drag libRCTBarCode.a from the Products folder inside the RCTBarCode.xcodeproj.

  • Look for Header Search Paths and make sure it contains $(SRCROOT)/../../../react-native/React as recursive.

  • Dray raw folder to your project

  • Add Privacy - Camera Usage Description property in your info.plist(for ios 10)

Installation (Android)

  • In android/settings.gradle
...
include ':react-native-barcode-scan'
project(':react-native-barcode-scan').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-barcode-scan/android')
  • In android/app/build.gradle
...
dependencies {
    ...
    // From node_modules
    compile project(':react-native-barcode-scan')
}
  • In 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()
      );
    }
  };

  public void setReactNativeHost(ReactNativeHost reactNativeHost) {
    mReactNativeHost = reactNativeHost;
  }

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }
...
  • In AndroidManifest.xml, add camera permissions
...
<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"/>
...

Full Demo

see ReactNativeComponentDemos

Usage

Install the package from npm with npm install react-native-barcode-scan --save. Then, require it from your app's JavaScript files with import Barcode from 'react-native-barcode-scan'.

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

import Barcode from 'react-native-barcode-scan'
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.timer = setTimeout(
              () => this.setState({viewAppear: true}),
              255
            );
    }

    componentWillUnmount () {
        this.timer && clearTimeout(this.timer);
    }

    _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)

Props

PropTypeOptionalDefaultDescription
barCodeTypesarrayYesdetermines the supported barcodeTypes
scannerRectWidthnumberYes255determines the width of scannerRect
scannerRectHeightnumberYes255determines the height of scannerRect
scannerRectTopnumberYes0determines the top shift of scannerRect
scannerRectLeftnumberYes0determines the left shift of scannerRect
scannerLineIntervalnumberYes3000determines the interval of scannerLine's movement
scannerRectCornerColorstringYes#09BB0Ddetermines the color of scannerRectCorner