gradle 错误:未授予权限... react-native-image-picker

mgdq6dx1  于 2022-11-14  发布在  React
关注(0)|答案(5)|浏览(173)

我正在尝试从客户端应用程序的内部存储器上传图像,使用

  • React Native图像拾取器@^0.26.4 *

在执行下面的示例代码片段后,我意外地得到了响应。

ImagePicker.showImagePicker(options, response => {
  console.log("Response = ", response)

  if (response.didCancel) {
    console.log("User cancelled image picker")
  } else if (response.error) {
    console.log("ImagePicker Error: ", response.error)
  } else if (response.customButton) {
    console.log("User tapped custom button: ", response.customButton)
  } else {
    const source = { uri: response.uri }
    // RNGRP.getRealPathFromURI(response.uri).then(filePath => {
    //   uploadImageToS3(filePath, "dinesh")
    //   console.log(filePath)
    // })

    // You can also display  the image using data:
    // let source = { uri: 'data:image/jpeg;base64,' + response.data };

    this.setState({
      avatarSource: source
    })
  }

响应

  • 响应= {错误:“未授予权限”}错误:“未授予权限”proto:对象D:\my_app\index.js:124图像选取器错误:未授予权限
  • 有时,On Allow按钮按下应用程序会意外崩溃。

其他信息

  • React原生版本:~0.46.1
  • 请访问:16.0.0-alpha.12
  • 平台:【安卓5.1及以上】
  • 开发操作系统:[Windows 7专业版]
  • 开发工具:[ Android Studio版本2.3.2,Android SDK 23]
tyg4sfes

tyg4sfes1#

AndroidManifest.xml中添加以下代码:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

根据Jaffar Raza和szskdgi的建议编辑了此文章

iyfamqjs

iyfamqjs2#

将此代码添加到android/app/src/main/Android Manifiest.xml中

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
lh80um4z

lh80um4z3#

将以下权限添加到AndroidManifiest.xml之后

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我们应该在处理功能之前检查权限。
例如:-步骤1(检查权限是否为“已授予”)

const isCameraAuthorized = await permissions.checkPermission(
          PermissionType.CAMERA
        );
enter code here

步骤2(请求权限)

cameraPermissionStatus = await permissions.requestPermission(
            PermissionType.CAMERA
          );

则我们必须对WRITE_EXTERNAL_STORAGE执行相同的操作,

cameraPermissionStatus = await permissions.requestPermission(
                PermissionType.WRITE_EXTERNAL_STORAGE 
              );
 const isCameraAuthorized = await permissions.checkPermission(
              PermissionType.WRITE_EXTERNAL_STORAGE 
            );
lskq00tm

lskq00tm4#

在添加此权限时,在某些设备中出现“用户未授予库权限”消息

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

所以我改成了

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
  package="com.app.name">
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" tools:replace="android:maxSdkVersion" />

并在变更后工作

lymnna71

lymnna715#

如果您使用的是Android M或API级别23+,则接受的答案将不起作用,您需要提示用户获得权限。
将此代码添加到android/app/src/main/AndroidManifiest.xml

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

App.js

const App=()=>{
   useEffect(() => {
    requestPermission()
  }, [])

  const requestPermission = async () => {
    try {
      console.log('asking for permission')
      const granted = await PermissionsAndroid.requestMultiple(
        [PermissionsAndroid.PERMISSIONS.CAMERA,
        PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE]
      )
      if (granted['android.permission.CAMERA'] && granted['android.permission.WRITE_EXTERNAL_STORAGE']) {
        console.log("You can use the camera");
      } else {
        console.log("Camera permission denied");
      }
    } catch (error) {
      console.log('permission error', error)
    }
  }
  ....

}

详细实现和需要提示用户的权限列表
https://reactnative.dev/docs/permissionsandroid

相关问题