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.xmlnode_modules\react-native\ReactAndroid\src\main\AndroidManifest.xmlnode_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 的库

在授予权限之前调用的请求权限方法

React-native:- 位置权限对话框不起作用