美文网首页
native 实现二维码和条形码扫码

native 实现二维码和条形码扫码

作者: 码代码的小公举 | 来源:发表于2018-04-04 15:49 被阅读467次

我选择了react-native-camera,地址:https://www.npmjs.com/package/react-native-camera
我这里用尽量简单的配置和使用方式来感受react-native-camera

在package.json 里的dependencies内加:

"react-native-camera": "git+https://git@github.com/react-native-community/react-native-camera",

npm install
react-native link react-native-camera
android配置:

android/settings.gradle:
以下代码有则不需要改动,无则添加,我在link后是已经自动生成了的。

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

android/app/build.gradle:
这里原来自动生成的是这样的

compile project(':react-native-camera')

按照文档说的改成了:

compile (project(':react-native-camera')) {
        exclude group: "com.google.android.gms"
        compile 'com.android.support:exifinterface:25.+'
        compile ('com.google.android.gms:play-services-vision:12.0.1') {
            force = true
        }
  }

android/build.gradle:
在allprojects中repositories里添加如下语句,注意顺序

maven { url "https://jitpack.io" }
maven { url "https://maven.google.com" }

我的完成结构:

allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven { url "https://jitpack.io" }
        maven { url "https://maven.google.com" }
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
    }
}

MainApplication.java:
检查无则添加,我在link后已存在

import org.reactnative.camera.RNCameraPackage;

new RNCameraPackage()  //asList内添加

有些人会不太知道位置,这里是我的完成效果:

package com.tms_driver;

import android.app.Application;

import com.facebook.react.ReactApplication;
import org.reactnative.camera.RNCameraPackage;     //这里~~~~
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          new RNCameraPackage()   //这里~~~~
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

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

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

链接给的文档中还有一些配置,这里我不需要,需要的可以去阅读文档。

接下去就是使用了

引入:

import Camera from 'react-native-camera';   //可扫二维码与条形码

使用:

constructor(props) {
    super(props)
    this.state = {
      open: false,
      code: '',
    }
  }
  componentDidMount(){
  }
  componentWillReceiveProps(nextProps) {
    if (nextProps !== this.props) {

    }
  }
onBarCodeRead(e) {
    if (e.data !== this.code) {
      this.setState({open: false, code: e.data })
      //当条形码变化时保存当前条形码,并关闭扫码
    }
  }

  render() {
    return (
      <View style={styles.container}>
        {
          this.state.open ?
          <Camera
            ref={(cam) => { this.camera = cam }}
            onBarCodeRead={e => this.onBarCodeRead(e)}
            style={styles.preview}
            aspect={Camera.constants.Aspect.fill}
          >

          </Camera>
          :
          <View>
            <TouchableOpacity onPress={() => this.setState({open: true})}>
              <Text>扫一扫</Text>
            </TouchableOpacity>
            <Text>结果:{this.state.code}</Text>
          </View>
        }
      </View>
    )
  }

扫条形码得到的是一串数字编号,
我的实际使用里是利用这个数字编号去数据库查询产品信息,并做一些记录和操作。
扫二维码一般是一个链接。
<Camera>在这里你可以写上你想要的样式,例如扫描线的动画效果</Camera>

相关文章

网友评论

      本文标题:native 实现二维码和条形码扫码

      本文链接:https://www.haomeiwen.com/subject/fsgkhftx.html