Home > OS >  react native android ask camera permission when user first logs in
react native android ask camera permission when user first logs in

Time:01-26

I'm not familiar with the react-native app permissions for android and ios. I'm in thihs project which needs camera and audio permissions for videocalls that are already implemented and work fine.

The thing is that currently these permissions are asked the first time the users enters a videocall and that causes delay and bugs on the videocall flow. I'd like to aks these permissions the first time the users opens the app (they enter first to their profile or the dashboard, the videocall part happens afterwards), like I've seen other apps do.

This is the androidManifest.xml file that handles the permissions. I looked for a way to change when they're asked but I couldn't find anything on the format I'm currently at, and since it's new to me I don't want to change the behaviour completely by accident.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.rectnativetemplate">

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

    <application
      android:name=".MainApplication"
      android:usesCleartextTraffic="true"
      android:label="@string/app_name"
      android:requestLegacyExternalStorage="true"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="dev--b45llct.us.auth0.com"
                android:pathPrefix="/android/${applicationId}/callback"
                android:scheme="${applicationId}" />
        </intent-filter>
      </activity>

------------

      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>

Is there a way to ask the permissions when the user first enters the app? And if it's possible, how can I implement the same behaviour on IOS?

CodePudding user response:

Use request from PermissionsAndroid.

const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.CAMERA);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
  console.log('Camera permission granted');
} else {
  console.log('Camera permission denied');
}

CodePudding user response:

Example import

import { RNCamera, FaceDetector } from 'react-native-camera';

 - List item

yarn: yarn add react-native-camera@git https://[email protected]/react-native-community/react-native-camera.git

npm: npm install --save react-native-camera@git https://[email protected]/react-native-community/react-native-camera.git

On Android you must ask for camera permission:

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

For Enabling the video recording feature you have to add the following code to the AndroidManifest.xml:

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

FOR iOS: Try to Update Info.plist with a usage description for the camera

<key>NSCameraUsageDescription</key>
<string>Your own description of the purpose</string>

  • Related