앱 개발 시 특정 권한을 획득해야 동작이 가능한 기능들이 존재합니다. flutter에서는 permission_handler라는 패키지 형태로 제공하여 쉽게 사용할 수 있습니다.
패키지 설치(택 1)
· Terminal에서 [flutter pub add permission_handler] 입력
· pubspec.yaml에서 [permission_handler : 버전] 입력 후 Pub get 클릭
네이티브 설정
· Android
1. gradle.properties 파일에 코드 추가합니다.
android.useAndroidX=true
android.enableJetifier=true
2. build.gralde 파일에 compileSdkVersion을 33으로 설정합니다.
android {
compileSdkVersion 33
...
}
3. AndroidManifest.xml에서 사용할 권한을 추가합니다.
<uses-permission android:name="android.permission.권한"/>
· IOS
1. Info.plist에서 사용할 권한을 추가합니다.
<dict>
...
<!-- 예시 camera -->
<key>NSCameraUsageDescription</key>
<string>camera</string>
</dict>
2. Podfile에서 사용할 권한을 수정합니다.
...
## dart: PermissionGroup.camera
'PERMISSION_CAMERA=1',
...
권한 종류
· Android : Android developers의 Manifest.permission 페이지에서 확인하시길 바랍니다.
· IOS : permission_handler의 documentation 페이지에서 확인하시길 바랍니다.
권한 상태 확인
var status = await Permission.camera.status;
// PermissionStatus로는
// denied, granted, restricted, limited, permanentlyDenied
// 가 있습니다.
권한 요청
// 권한이 거부되었다면
if(status.isDenied){
// 권한을 요청합니다.
PermissionStatus request = await Permission.camera.request();
}
권한 수동 요청
// 앱 설정 창을 열어서 수동으로 권한을 주도록 유도합니다.
openAppSettings();
// Dialog 형식입니다.
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
content: Text("권한 설정을 확인해주세요."),
actions: [
TextButton(
child: Text('취소'),
onPressed: () => Navigator.pop(context),
),
TextButton(
onPressed: () {
openAppSettings();
},
child: Text('설정하기'))
],
);
}
);
Android11(API 30)
Android11부터는 사용자가 앱이 설치된 동안 특정 권한을 2번 이상 거부한다면 앱에서 그 권한을 요청해도 사용자에게 권한 요청이 표시되지 않습니다. 이 경우에는 권한 수동 요청을 통해서 직접 권한을 주어야 합니다. 그리고 Android 11에서는 storage 부분이 업데이트되었기 때문에 이 페이지에서 확인하시길 바랍니다.
출처
https://pub.dev/packages/permission_handler/install
'프로그램 개발 > Flutter' 카테고리의 다른 글
[flutter] 음원 정보 접근하기 : on audio query (0) | 2023.04.11 |
---|---|
[flutter] 디스크에 데이터 저장하기 : Shared preferences (0) | 2023.04.03 |
[flutter] Android Multidex 오류 (0) | 2023.02.14 |
[flutter] flutter doctor Unable to find bundled Java version 오류 (0) | 2023.02.07 |
[flutter] flutter doctor No Java Development Kit 오류 (0) | 2023.02.07 |