권한 사용 워크플로에서 언급된 대로 앱에서 앱 권한을 요청하는 경우 앱의 매니페스트 파일에서 이 권한을 선언해야 합니다. 이러한 선언은 앱 스토어 및 사용자가 앱이 요청할 수 있는 권한 세트를 파악하는 데 도움이 됩니다.
권한을 요청하는 프로세스는 권한 유형에 따라 다릅니다.
- 권한이 일반 권한 또는 서명 권한과 같은 설치 시간 권한인 경우에는 설치 시 자동으로 권한이 부여됩니다.
- 권한이 런타임 권한 또는 특별 권한이고 앱이 Android 6.0(API 수준 23) 이상을 실행하는 기기에 설치된 경우 런타임 권한 또는 특별 권한을 직접 요청해야 합니다.
앱 매니페스트에 선언 추가
앱이 요청할 수 있는 권한을 선언하려면 앱의 매니페스트 파일에 적절한 <uses-permission>
요소를 포함하세요. 예를 들어 카메라에 액세스해야 하는 앱에는 AndroidManifest.xml
에 다음 줄이 있습니다.
<manifest ...> <uses-permission android:name="android.permission.CAMERA"/> <application ...> ... </application> </manifest>
하드웨어를 선택사항으로 선언
CAMERA
와 같은 일부 권한은 앱이 일부 Android 기기만 보유하고 있는 하드웨어에 액세스하도록 허용합니다. 앱에서 이러한 하드웨어 관련 권한 중 하나를 선언하는 경우, 이러한 하드웨어가 없는 기기에서는 여전히 앱을 실행할 수 없는지 고려해야 합니다. 대부분의 경우 하드웨어는 선택사항이므로 AndroidManifest.xml
파일의 다음 코드 스니펫에서와 같이 <uses-feature>
선언에서 android:required
를 false
로 설정하여 하드웨어를 선택사항으로 선언하는 것이 좋습니다.
<manifest ...> <application> ... </application> <uses-feature android:name="android.hardware.camera" android:required="false" /> <manifest>
하드웨어 사용 가능 여부 결정
하드웨어를 선택사항이라고 선언하면 앱이 해당 하드웨어가 없는 기기에서도 실행될 수 있습니다. 기기에 특정 하드웨어가 있는지 확인하려면 다음 코드 스니펫과 같이 hasSystemFeature()
메서드를 사용하세요. 하드웨어를 사용할 수 없다면 앱에서 해당 기능을 적절하게 사용 중지합니다.
Kotlin
// Check whether your app is running on a device that has a front-facing camera. if (applicationContext.packageManager.hasSystemFeature( PackageManager.FEATURE_CAMERA_FRONT)) { // Continue with the part of your app's workflow that requires a // front-facing camera. } else { // Gracefully degrade your app experience. }
자바
// Check whether your app is running on a device that has a front-facing camera. if (getApplicationContext().getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA_FRONT)) { // Continue with the part of your app's workflow that requires a // front-facing camera. } else { // Gracefully degrade your app experience. }
API 수준별 권한 선언
런타임 권한을 지원하는 기기, 즉 Android 6.0(API 수준 23) 이상을 실행하는 기기에만 권한을 선언하려면 <uses-permission>
요소 대신 <uses-permission-sdk-23>
요소를 포함해야 합니다.
이러한 요소 중 하나를 사용할 경우 maxSdkVersion
속성을 설정하여, 지정된 값보다 높은 버전의 Android를 실행하는 기기에 특정 권한이 필요하지 않음을 나타낼 수 있습니다. 이렇게 하면 이전 기기와의 호환성을 제공하면서 불필요한 권한을 제거할 수 있습니다.
예를 들어 앱에서는 사용자가 앱을 사용하면서 만든 미디어 콘텐츠(예: 사진이나 동영상)를 표시할 수 있습니다. 이때 앱이 Android 10 이상을 타겟팅하는 한 Android 10(API 수준 29) 이상을 실행하는 기기에서는 READ_EXTERNAL_STORAGE
권한을 사용하지 않아도 됩니다. 그러나 이전 기기와의 호환성을 위해 READ_EXTERNAL_STORAGE
권한을 선언하고 android:maxSdkVersion
을 28로 설정할 수 있습니다.