需要帮助在本机反应项目中实施 RNCamera

Need help implementing RNCamera in a react native project

我已经使用 "expo init." 创建了一个 react-native 项目我想使用 RNCamera,但是我收到以下错误。 "Possible Unhandled Promise Rejection(id:0): Error: Tried to use permissions API but the host Activity doesn't implement PermissionAwareActivity." 问题是,所有在线帮助似乎都指向 java 个文件,这些文件在使用 "expo init" 创建的项目中不存在。我正在尝试构建一个跨平台应用程序。有人可以帮我解决这个问题吗?我不确定从哪里开始,因为我认为大部分帮助都是针对 android 个应用程序。

我尝试在互联网上搜索,但只找到了 android 特定的解决方案,这些解决方案需要编辑不在我的项目中的 java 文件。

/*I don't think I have permission to upload pictures yet, but here is a list of the files in my created project. 

.expo
.git
assets
node_modules
.gitignore
.watchmanconfig
App.js
app.json
babel.config.js
package.json
yarn.lock
*/

import React, {PureComponent} from 'react';
import { View, Text, Button, StyleSheet, TouchableOpacity } from 'react-native';
import { RNCamera } from 'react-native-camera';

export default function App() {
  return (
    <View style = {{flex: 1}}>
      <RNCamera
        ref={ref => {
          this.camera = ref;
        }}
        style = {{flex: 1, width: '100%'
      }}
      >
      </RNCamera>
    </View>
  );
}

我只想访问摄像头。感谢您的帮助!!

如果您通过 Expo 创建了一个项目,最好使用 Expo 模块而不使用它。你可以试试这个expo install expo-camera

如果你想使用原来的模块,或者如果你使用我告诉你的模块,你必须被授权,因为你需要存储space来存储你的相机和照片。

你可以试试这个expo install expo-permissions

  • 相机使用权:Permissions.CAMERA
  • 视频使用权:Permissions.AUDIO_RECORDING
  • 存储 space 权限:Permissions.CAMERA_ROLL

用法

import React from 'react';
import { Text, View, TouchableOpacity } from 'react-native';
import * as Permissions from 'expo-permissions';
import { Camera } from 'expo-camera';

export default class CameraExample extends React.Component {
  state = {
    hasCameraPermission: null,
    type: Camera.Constants.Type.back,
  };

  async componentDidMount() {
    const { status } = await Permissions.askAsync(Permissions.CAMERA);
    this.setState({ hasCameraPermission: status === 'granted' });
  }

  render() {
    const { hasCameraPermission } = this.state;
    if (hasCameraPermission === null) {
      return <View />;
    } else if (hasCameraPermission === false) {
      return <Text>No access to camera</Text>;
    } else {
      return (
        <View style={{ flex: 1 }}>
          <Camera style={{ flex: 1 }} type={this.state.type}>
            <View
              style={{
                flex: 1,
                backgroundColor: 'transparent',
                flexDirection: 'row',
              }}>
              <TouchableOpacity
                style={{
                  flex: 0.1,
                  alignSelf: 'flex-end',
                  alignItems: 'center',
                }}
                onPress={() => {
                  this.setState({
                    type:
                      this.state.type === Camera.Constants.Type.back
                        ? Camera.Constants.Type.front
                        : Camera.Constants.Type.back,
                  });
                }}>
                <Text style={{ fontSize: 18, marginBottom: 10, color: 'white' }}> Flip </Text>
              </TouchableOpacity>
            </View>
          </Camera>
        </View>
      );
    }
  }
}