포그라운드 서비스 선언 및 권한 요청

앱의 매니페스트에서 <service> 요소로 앱의 각 포그라운드 서비스를 선언합니다. 각 서비스에 android:foregroundServiceType 속성을 사용하여 서비스가 어떤 작업을 하는지 선언합니다.

또한 포그라운드 서비스에 필요한 권한을 요청합니다.

버전 호환성

포그라운드 서비스를 선언하고 권한을 요청하는 요구사항은 앱이 타겟팅하는 API 수준에 따라 다릅니다. 이 페이지에서는 API 수준 34 이상을 타겟팅하는 앱의 요구사항을 설명합니다. 이전 플랫폼 버전의 포그라운드 서비스 변경사항에 관한 자세한 내용은 포그라운드 서비스 변경사항을 참고하세요.

앱 매니페스트에서 포그라운드 서비스 선언

다음 코드는 미디어 재생 포그라운드 서비스를 선언하는 방법을 보여줍니다. 이러한 서비스를 사용하여 음악을 재생할 수 있습니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
  <application ...>

    <service
        android:name=".MyMediaPlaybackService"
        android:foregroundServiceType="mediaPlayback"
        android:exported="false">
    </service>
  </application>
</manifest>

코드에 관한 핵심 사항

  • 이 예시에서 서비스에는 media 유형 하나만 있습니다. 서비스에 여러 유형이 적용되는 경우 | 연산자로 구분합니다. 예를 들어 서비스에서 카메라와 마이크를 사용하는 경우 다음과 같이 선언합니다.

    android:foregroundServiceType="camera|microphone"
    
  • 앱이 타겟팅하는 API 수준에 따라 앱 매니페스트에서 포그라운드 서비스를 선언해야 할 수 있습니다. 특정 API 수준의 요구사항은 포그라운드 서비스 변경사항에 설명되어 있습니다.

    포그라운드 서비스를 만들려고 하는데 해당 유형이 매니페스트에 선언되어 있지 않으면 시스템은 startForeground() 호출 시 MissingForegroundServiceTypeException을 발생시킵니다.

    필요하지 않은 경우에도 모든 포그라운드 서비스를 선언하고 서비스 유형을 제공하는 것이 좋습니다.

포그라운드 서비스 권한 요청

다음 코드는 카메라를 사용하는 포그라운드 서비스의 권한을 요청하는 방법을 보여줍니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA"/>

    <application ...>
        ...
    </application>
</manifest>

코드에 관한 핵심 사항

  • 이 코드는 API 수준 34 이상을 타겟팅하는 앱의 권장사항을 사용합니다.