앱 권한 선언

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

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

앱 매니페스트에 선언 추가

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

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

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

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

<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.
}

Java

// 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로 설정할 수 있습니다.