react-native-permissions 在 react-native expo 项目中返回 RNPermissions null
Posted
技术标签:
【中文标题】react-native-permissions 在 react-native expo 项目中返回 RNPermissions null【英文标题】:react-native-permissions returning RNPermissions null in react-native expo project 【发布时间】:2020-04-05 13:46:07 【问题描述】:我是 Expo 的新手,我不知道这里有什么问题,我对 android 已经足够好了,我正在尝试在一个新创建的空白 react-native expo 项目中使用react-native-qrcode-scanner。我没有触及项目内部的任何内容,只是创建了一个全新的项目,我收到错误消息RNPermissions is null
。我认为它告诉传递有关我的 android 应用程序的详细信息,有人可以帮助我如何开始吗?我正在使用react-native-permissions 作为二维码扫描仪的代码所需,我卸载了依赖项中的所有内容,只留下了这些:
"dependencies":
"expo": "~36.0.0",
"react": "~16.9.0",
"react-dom": "~16.9.0",
"react-native": "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz",
"react-native-permissions": "^2.0.2",
"react-native-web": "~0.11.7"
所以只有基本的欢迎在 App.js 中做出这样的反应:
import React from 'react';
import StyleSheet, Text, View from 'react-native';
import check, PERMISSIONS, RESULTS from 'react-native-permissions';
class App extends React.Component
constructor(props)
super(props);
render()
return (
<View style=styles.container>
<Text>Open up App.js to start working on your app!</Text>
</View>
);
const styles = StyleSheet.create(
container:
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
,
);
export default App;
这是 app.json 文件:
"expo":
"name": "App1",
"slug": "App1",
"privacy": "public",
"sdkVersion": "36.0.0",
"platforms": [
"ios",
"android",
"web"
],
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"splash":
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
,
"updates":
"fallbackToCacheTimeout": 0
,
"assetBundlePatterns": [
"**/*"
],
"ios":
"supportsTablet": true
【问题讨论】:
发布您的 app.json 文件 @DominikTargosz app.json 文件添加 【参考方案1】:根据您在 App.js 上分享的内容,您尚未使用 react-native-permissions
中的任何功能
您需要获得设备所有者的许可才能使用相机。您可能遗漏了一些事情,并且您想检查以下内容:
安卓版
-
AndroidManifest.xml - 您是否拥有请求的所需权限。 You may refer to this。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
-
确保您已链接库
对于 iOS
-
您需要将以下内容附加到您的 Info.plist 中
<key>NSCameraUsageDescription</key>
<string>Our app need your permission to use your camera phone</string>
-
确保已链接库
在 iOS 文件夹上安装 Pod(对于 React Native >= 0.60)Follow the instruction given here
在项目根目录运行
react-native link
(对于 React Native
【讨论】:
expo 项目中的 AndroidManifest.xml 文件在哪里?这本来是一个简单的答案,但在 expo 项目中没有android/app/src/main/AndroidManifest.xml
文件夹或文件,甚至没有 index.js 但我做了一些挖掘,发现有多个 Manifest xml 文件,每个依赖项都有自己的
有多个,如node_modules\expo-permissions\android\src\main\AndroidManifest.xml
和node_modules\react-native\ReactAndroid\src\main\AndroidManifest.xml
和node_modules\react-native-permissions\android\src\main\AndroidManifest.xml
@AbhishekKumarChowdhury 如果我没记错的话,您应该按照此处所述在 app.json 中附加权限"permissions": [
docs.expo.io/versions/latest/workflow/configuration/#android
@TommyLeong android manifest 和 info.plist 在 expo 中不可用。它的反应原生【参考方案2】:
这个包react-native-qrcode-scanner 建议使用react native camera,并且需要链接。如果您使用 expo ,您将无法链接,因为 expo 不允许链接库。因此,如果您打算使用同一个库,那么首先从 expo 中弹出以响应本机,然后尝试使用它,因为您无法访问链接库。
如果你想在 expo 中实现,那么 expo 有自己的条码扫描器,请在下面查看。 expo barcode scanner 。它有一个漂亮的文档。请阅读。
希望对您有所帮助。如有疑问,请随意
【讨论】:
以上是关于react-native-permissions 在 react-native expo 项目中返回 RNPermissions null的主要内容,如果未能解决你的问题,请参考以下文章
使用 React-native-permissions 尝试使用 xcode ld 构建时出现此错误:找不到 -lPermission-LocationWhenInUse 的库