【问题标题】:react-native-permissions returning RNPermissions null in react-native expo projectreact-native-permissions 在 react-native expo 项目中返回 RNPermissions null
【发布时间】: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 文件添加

标签: android reactjs react-native react-native-android react-native-permissions


【解决方案1】:

根据您在 App.js 上分享的内容,您尚未使用 react-native-permissions 中的任何功能

您需要获得设备所有者的许可才能使用相机。您可能遗漏了一些事情,并且您想检查以下内容:

安卓版

  1. 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" />
  1. 确保您已链接库

对于 iOS

  1. 您需要将以下内容附加到您的 Info.plist 中
    <key>NSCameraUsageDescription</key>
    <string>Our app need your permission to use your camera phone</string>
  1. 确保已链接库

【讨论】:

  • 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 。它有一个漂亮的文档。请阅读。

希望对您有所帮助。如有疑问,请随意

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2022-11-07
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多