需要帮助在本机反应项目中实施 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>
);
}
}
}
我已经使用 "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>
);
}
}
}