android - 相机未运行

标签 android react-native expo

我正在尝试一遍又一遍地制作原型(prototype)应用程序

1-用相机录制视频 x 秒

2-显示此视频

为此,我使用来自 expo-camera 的组件 Camera 和来自 expo-av 的 Video

为此,我有两种观点:

我在我的代码中使用 stateSequence 属性和 sequencer() 函数,该函数交替显示带有拍摄 x 秒的 Camera 组件的 View 和允许我显示视频的视频 View 。

Sequencer() 由 componentWillMount() 中的 setInterval( this.sequencer , 10000) 触发

我可以交替地从带有 Camera 组件的 View 切换到带有 Video 组件的 View。

要使用 Camera 组件录制视频,我使用 recordAsync(),但出现以下错误:

Unhandled promise rejection: Error: Camera is not running

我正在使用安卓手机进行测试。

你不能帮我吗

这是我的代码
import { StyleSheet, Text, View ,TouchableOpacity} from 'react-native';

import * as Permissions from 'expo-permissions';
import { Camera } from 'expo-camera';
import { Video } from 'expo-av';
import { Logs } from 'expo';


export default class SequenceViewer extends Component {
  constructor(props) {
    super(props);
    this.state = {
      stateSequence: "SHOOT ",
      hasCameraPermission: null,
      type: Camera.Constants.Type.front,
    }
    this.recordVideo = this.recordVideo.bind(this)
  }

  sequencer = () => {  

    if(this.state.stateSequence==="WATCH"){ 
      this.setState({  stateSequence: "SHOOT",})

      this.recordVideo();  //  Error message   Camera is not running

    } else {
      this.setState({stateSequence: "WATCH"})
    }


  }

  async componentWillMount() {    
    let  rollStatus  = await Permissions.askAsync(Permissions.CAMERA_ROLL);
    let cameraResponse = await Permissions.askAsync(Permissions.CAMERA)
    if (rollStatus.status=='granted'){
      if (cameraResponse.status == 'granted' ){
        let audioResponse = await Permissions.askAsync(Permissions.AUDIO_RECORDING);
        if (audioResponse.status == 'granted'){
          this.setState({ permissionsGranted: true });

          setInterval( this.sequencer , 10000);

        }  
      }
    }                  
  }

  recordVideo = async () => {

            if(this.state.cameraIsRecording){
              this.setState({cameraIsRecording:false})
              this.camera.stopRecording();
            }
            else {
              this.setState({cameraIsRecording:true})
              if (this.camera) {
                let record = await  this.camera.recordAsync(quality='480p',maxDuration=5,mute=true).then( data =>{

                  this.setState( {recVideoUri :data.uri})                         
                }) 
             }   

            }
  };  


  render() {

    const { hasCameraPermission } = this.state
      if(this.state.stateSequence=="WATCH")
      {
        return(
          <View style={styles.container}>
           <Video
              source={{ uri:this.state.recVideoUri }}
              rate={1.0}
              volume={1.0}
              isMuted={false}
              resizeMode="cover"
              shouldPlay
              isLooping
              style={{ width: 300, height: 300 }}
              ref={(ref) => { this.player = ref }}   
            />
        </View>  
        )

      } else
      {
        return(

          <View style={{ flex: 1 }}>
          <Camera style={{ flex: 1 }} type={this.state.type}  ref={ref => {this.camera = ref; }}></Camera>
        </View>

        )
      }
  }
}

const styles = StyleSheet.create({
    viewerText: {
        fontSize: 20,
        fontWeight: 'bold',
    },
    container: {
      flex: 1,
      backgroundColor: '#fff',
      alignItems: 'center',
      justifyContent: 'center',
    },
  });

谢谢

最佳答案

我有同样的问题,我的解决方案是默认相机类型必须是“后”,您可以通过以下方式更改为“前”:

componentDidMount = () => {
    this.props.navigation.addListener('didFocus', async () => {
      await setTimeout(() => {
        this.setState({ cameraType: Camera.Constants.Type.front })
      }, 100)
    });
  }

关于android - 相机未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60023654/

相关文章:

android - React Native - 在包 'appComponentFactory' 中找不到属性 'android' 的资源标识符

javascript - react native 导航: Conditionally render tab bar badge not working?

react-native - React Native 应用程序包中的 .tflite 文件是什么以及如何删除它们

amazon-web-services - 通过 Expo ImagePicker 将 native 图片上传到 aws S3

react-native - 错误 : Cannot find module 'source-map-support'

安卓短信状态

android - 如何从通用适配器调用 notifyDataSetChanged()

list - ScrolltoIndex 在平面列表上不起作用 react 原生

java - 应用程序需要 13 秒才能显示启动屏幕

java - Android 数据库应用程序在模拟器上运行良好,但在设备上出现错误