차근차근 생활 & 코딩

[React Native] RN - 권한(카메라, 사진, 미디어, 파일, 위치) 요청하기 본문

IT/REACT NATIVE(리액트 네이티브)

[React Native] RN - 권한(카메라, 사진, 미디어, 파일, 위치) 요청하기

ssilook 2022. 3. 23. 13:59
반응형

안녕하세요.

 

이번 시간에는 안드로이드 권한 설정 하는 방법에 대해 알려드리도록 하겠습니다.

 

안드로이드(Android) 권한 설정

android > app > src > main > AndroidManifest.xml 경로에 아래 코드를 추가해 주도록 합니다.

 <!-- 카메라 사용 권한 -->
 <uses-permission android:name="android.permission.CAMERA" /> 
 <!-- 카메라 쓰기 사용 권한 -->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <!-- 카메라 읽기 사용 권한 -->
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <!-- 위치 사용 권한 -->
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 

권한요청

아래 코드를 활용하여 권한을 요청하도록 합니다.

import { PermissionsAndroid } from 'react-native';
  const requestPermission = async () => {
    if (Platform.OS === 'android') {
      await PermissionsAndroid.requestMultiple([
        // PermissionsAndroid.PERMISSIONS.CAMERA,
        PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
        PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
        PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      ]).then(result => {
        if (
          // result['android.permission.CAMERA'] &&
          result['android.permission.WRITE_EXTERNAL_STORAGE'] &&
          result['android.permission.ACCESS_COARSE_LOCATION'] &&
          result['android.permission.ACCESS_FINE_LOCATION'] &&
          result['android.permission.READ_EXTERNAL_STORAGE'] === 'granted'
        ) {
          console.log('카메라, 미디어파일, 위치 액세스 권한 허용');
        } else {
          console.log('모든 권한 거절');
        }
      });
    } else {
    }
  };
<Button title="권한 버튼" onPress={() => requestPermission()} />

 

결과화면

전체코드

import {StyleSheet, View, Button} from 'react-native';
import React from 'react';
import {PermissionsAndroid} from 'react-native';

export default function App() {
  const requestPermission = async () => {
    if (Platform.OS === 'android') {
      await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.CAMERA,
        PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
        PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
        PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      ]).then(result => {
        if (
          result['android.permission.CAMERA'] &&
          result['android.permission.WRITE_EXTERNAL_STORAGE'] &&
          result['android.permission.ACCESS_COARSE_LOCATION'] &&
          result['android.permission.ACCESS_FINE_LOCATION'] &&
          result['android.permission.READ_EXTERNAL_STORAGE'] === 'granted'
        ) {
          console.log('카메라, 미디어파일, 위치 액세스 권한 허용');
        } else {
          console.log('권한거절');
        }
      });
    } else {
    }
  };

  return (
    <View style={{flex: 1}}>
      <Button title="권한 버튼" onPress={() => requestPermission()} />
    </View>
  );
}

 

수고하셨습니다.

반응형
Comments