native 實(shí)現(xiàn)二維碼和條形碼掃碼

我選擇了react-native-camera,地址:https://www.npmjs.com/package/react-native-camera
我這里用盡量簡(jiǎn)單的配置和使用方式來(lái)感受react-native-camera

在package.json 里的dependencies內(nèi)加:

"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:
以下代碼有則不需要改動(dòng),無(wú)則添加,我在link后是已經(jīng)自動(dòng)生成了的。

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

android/app/build.gradle:
這里原來(lái)自動(dòng)生成的是這樣的

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

按照文檔說(shuō)的改成了:

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里添加如下語(yǔ)句,注意順序

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

我的完成結(jié)構(gòu):

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:
檢查無(wú)則添加,我在link后已存在

import org.reactnative.camera.RNCameraPackage;

new RNCameraPackage()  //asList內(nèi)添加

有些人會(huì)不太知道位置,這里是我的完成效果:

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 })
      //當(dāng)條形碼變化時(shí)保存當(dāng)前條形碼,并關(guān)閉掃碼
    }
  }

  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>結(jié)果:{this.state.code}</Text>
          </View>
        }
      </View>
    )
  }

掃條形碼得到的是一串?dāng)?shù)字編號(hào),
我的實(shí)際使用里是利用這個(gè)數(shù)字編號(hào)去數(shù)據(jù)庫(kù)查詢(xún)產(chǎn)品信息,并做一些記錄和操作。
掃二維碼一般是一個(gè)鏈接。
<Camera>在這里你可以寫(xiě)上你想要的樣式,例如掃描線的動(dòng)畫(huà)效果</Camera>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,023評(píng)論 25 709
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • React Native優(yōu)秀博客,以及優(yōu)秀的Github庫(kù)列表(很多英文資料源自于[awesome-react-n...
    董董董董董董董董董大笨蛋閱讀 11,010評(píng)論 4 162
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,871評(píng)論 2 45
  • 目標(biāo):到2018年2月7日,收入增加5萬(wàn)元;意識(shí)狀態(tài)由己及人。 1.在智庫(kù)捐款2元。愿全世界的人能通過(guò)這個(gè)智慧的網(wǎng)...
    晶晶_37cd閱讀 178評(píng)論 0 0

友情鏈接更多精彩內(nèi)容