권한 거부: startForeground에 안드로이드가 필요합니다.허가.전경_서비스
최근 우리는 갑자기 다음과 같은 몇 가지 스택 트레이스를 보게 되었습니다.왜 그럴 수가 있죠?미디어 알림 등으로 오디오 해설 서비스를 전면으로 옮기려고 할 때부터입니다.
java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE
at android.os.Parcel.createException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1910)
at android.os.Parcel.readException(Parcel.java:1860)
at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198)
at android.app.Service.startForeground(Service.java:695)
at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372)
at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328)
at com.example.app.services.AudioService.onStartCommand(AudioService.java:228)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667)
at android.app.ActivityThread.access$1600(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.am.ActivityManagerService.enforcePermission(ActivityManagerService.java:9186)
at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1189)
at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:870)
at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:20434)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:976)
설정한 경우 이 문제가 발생합니다.targetSdkVersion = 28
(Android 9 / Pie) 이상이며 사용을 선언하지 않았습니다.FOREGROUND_SERVICE
허가.
Android 9용 마이그레이션 노트에서:
포그라운드 서비스를 이용하고자 하는 앱은 이제 포그라운드_SERVICE 권한을 먼저 요청해야 합니다.이것은 일반적인 권한이기 때문에 시스템이 요청하는 앱에 자동으로 권한을 부여합니다.권한 없이 포그라운드 서비스를 시작하면 보안이 발생합니다.예외.
해결책은 다음을 추가하는 것입니다.AndroidManifest.xml
:
<manifest ...>
...
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
...
<application ...>
...
</manifest>
권한 거부: startForeground에 안드로이드가 필요합니다.허가.전경_서비스
Android 9 이상(API 레벨 28)을 대상으로 하며 포그라운드 서비스를 사용하는 앱은 다음을 요청해야 합니다.FOREGROUND_SERVICE permission
.
그래서 이제 매니페스트 파일에 포그라운드 서비스 권한을 추가해야 합니다.
- 일반 애플리케이션을 사용할 수 있습니다.
Service.startForeground
샘플
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
FOREGROUND_SERVICE
는 일반적인 권한이므로 시스템이 요청하는 앱에 자동으로 권한을 부여합니다.
Android 9 / Pie의 마이그레이션 노트를 확인합니다.
- 바꾸다
포그라운드 서비스 권한
- 요약
포그라운드 서비스를 이용하고자 하는 앱은 이제 포그라운드_SERVICE 권한을 먼저 요청해야 합니다.이것은 일반적인 권한이기 때문에 시스템이 요청하는 앱에 자동으로 권한을 부여합니다.권한 없이 포그라운드 서비스를 시작하면 보안이 발생합니다.예외.
읽기도
- API 대상 앱
Build.VERSION_CODES.P
또는 나중에 허가를 요청해야 합니다.Manifest.permission.FOREGROUND_SERVICE
이 API를 사용하기 위해서 입니다.
에 주목해서FOREGROUND_SERVICE
런타임 권한 요구 사항이 없습니다.아래 매니페스트에만 추가
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
위의 행은 다음에 추가되어야 합니다.<application
API 레벨 28 이상의 경우 FOREGROUND_SERVICE 권한이 필요합니다.그렇지 않으면 실행할 수 없고 예외가 발생합니다.
추가하면 해결됩니다.
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
AndroidManifest.xml 파일에 저장합니다.
A targetSdkVersion
적어도28
2019년 11월 1일부터 플레이스토어의 앱 업데이트가 의무화됩니다.따라서 대상 API를 변경한 후 허가를 요청해야 합니다.FOREGROUND_SERVICE
와 충돌하는 것을startForeground()
언급URL : https://stackoverflow.com/questions/52382710/permission-denial-startforeground-requires-android-permission-foreground-servic
'programing' 카테고리의 다른 글
gcc를 사용하여 c 프로그램을 컴파일할 때 충돌하는 유형 오류 (0) | 2023.10.30 |
---|---|
데이터베이스는 어떻게 물리적으로 파일 시스템에 데이터를 저장합니까? (0) | 2023.10.30 |
굵고 이탤릭체가 EPLUS에서 작동하지 않음 (0) | 2023.10.30 |
문자 'a'로 시작하는 mysql 쿼리를 사용하여 모든 이름을 찾습니다. (0) | 2023.10.30 |
MariaDB JOIN 구문 (0) | 2023.10.30 |