앱 권한 선언

권한 사용 워크플로에서 언급된 대로 앱에서 앱 권한을 요청하는 경우 앱의 매니페스트 파일에서 이 권한을 선언해야 합니다. 이러한 선언은 앱 스토어 및 사용자가 앱이 요청할 수 있는 권한 세트를 파악하는 데 도움이 됩니다.

권한 요청을 실행하는 프로세스는 권한 유형에 따라 다릅니다.

  • 권한이 일반 권한 또는 서명 권한과 같은 설치 시간 권한인 경우에는 설치 시 자동으로 권한이 부여됩니다.
  • 권한이 런타임 권한이며 앱이 Android 6.0(API 수준 23) 이상을 실행하는 기기에 설치된 경우 직접 권한을 요청해야 합니다.

앱 매니페스트에 선언 추가

앱이 요청할 수 있는 권한을 선언하려면 앱의 매니페스트 파일에 적절한 <uses-permission> 요소를 포함하세요. 예를 들어 카메라에 액세스해야 하는 앱은 매니페스트에 다음 줄이 있어야 합니다.

AndroidManifest.xml

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

하드웨어를 선택사항으로 선언

CAMERA와 같은 일부 권한은 앱이 일부 Android 기기만 보유하고 있는 하드웨어에 액세스하도록 허용합니다. 앱에서 이러한 하드웨어 관련 권한 중 하나를 선언하는 경우, 이러한 하드웨어가 없는 기기에서는 앱을 전혀 실행할 수 없는지 고려해야 합니다. 대부분의 경우 하드웨어는 선택사항이므로 다음의 코드 스니펫에서와 같이 <uses-feature> 선언에서 android:requiredfalse로 설정하여 하드웨어를 선택사항으로 선언하는 것이 좋습니다.

AndroidManifest.xml

<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 속성을 설정할 수 있습니다. 이 속성은 maxSdkVersion보다 높은 버전을 실행하는 기기에 특정 권한이 필요하지 않음을 나타냅니다.