[Flutter] 카메라 권한 추가해주기

2023. 2. 23. 22:21Developers 공간 [Shorts]/Frontend

728x90
반응형
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew, 
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter

- Module Bundler  : React, Webpack, Parcel

B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS

C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight

 


1. What? (현상)

웹의 경우 아직 permission_handler가 지원되지 않는다.

안드로이드와 iOS의 경우 미리 OS에 어떤 권한을 필요로 하는지 명시해 주어야합니다.

더보기

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

<Web을 detect 하는 방법>

import 'package:get/get.dart';

bool isWeb = GetPlatform.isWeb;
bool isMobile = GetPlatform.isMobile;
bool isAndroid = GetPlatform.isAndroid;
bool isiOS = GetPlatform.isIOS;
bool isWeb = GetPlatform.isWeb;
bool isWindows = GetPlatform.isWindows;
bool isMac = GetPlatform.isMacOS;
bool isLinux = GetPlatform.isLinux;
bool isFusia = GetPlatform.isFuchsia;
bool isDesktop = GetPlatform.isDesktop;

if(!isWeb){
	...
}

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

 


2. Why? (원인)

  • 하지 않으면 권한을 얻을 수 없습니다.

3. How? (해결책)

<안드로이드>

  • android/gradle.properties
android.useAndroidX=true
android.enableJetifier=true
  • android/app/build.gradle
android {
    compileSdkVersion 33
}
더보기

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

<android SDK version 명시>

android SDK를 명시하는 내용은 compileSdkVersion, minSdkVersion, targetSdkVersion이 있지만,

해당 내용은 flutter.flutterCompileSdkVersion, flutter.minSdkVersion, flutter.targetSdkVersion 등으로 명시되어있고

해당 값은 {flutter 설치위치}/packages\flutter_tools\gradle\flutter.gradle 에 명시되어있습니다.

따라서 바꾸고 싶다면, 직접 바꿔주면 됩니다.

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

  • AndroidManifest.xml : 앱을 어떤 방식으로 실행하냐에 따라 debug, main, profile폴더에 각각 존재하지만, 일반적으로는 main만 고쳐주어도 가능합니다.
<manifest>
    ...
    <uses-permission android:name="android.permission.CAMERA"/>
    ...
</manifest>

 

 

<iOS>

  • ios/Podfile
post_install do |installer|
    installer.pods_project.targets.each do |target|
        ...
        target.build_configurations.each do |config|
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
                '$(inherited)',
                ## dart: PermissionGroup.camera
                # 'PERMISSION_CAMERA=1',
            ]
        end
    end
end

참조 : https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler/example/android/app/src/main/AndroidManifest.xml

  • ios/Runner/Info.plist : 왜 원하는지 적습니다.
<dict>
    ...
    <key>NSCameraUsageDescription</key>
    <string>${PRODUCT_NAME} wants to use! </string>
    ...
</dict>

 

 

<이후에>

var status = await Permission.camera.status;
if (status.isDenied) {
	if (await Permission.camera.request().isDenied) {
    	//ERROR
	}
}
flutter clean
flutter run

 


https://pub.dev/packages/permission_handler

728x90
반응형