В последнее время мы внезапно увидели несколько следующих следов стека. Почему это может быть? Это происходит с того момента, когда приложение пытается переместить службу аудиокомментариев на передний план с уведомлением мультимедиа и всем остальным.
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, нам не нужно никакого разрешения для запуска служб Foreground на устройствах с 28?maxSdkVersion
.Приложения, предназначенные для Android 9 (уровень API 28) или выше и использующие службы переднего плана, должны запрашивать
FOREGROUND_SERVICE permission
.Итак, теперь нам нужно добавить разрешение службы Foreground в файл манифеста
Service.startForeground
ОБРАЗЕЦ
Проверьте это заметки о миграции Android 9 / Pie
Также Читать
startForeground()
Build.VERSION_CODES.P
или более поздней версии должны запрашивать разрешениеManifest.permission.FOREGROUND_SERVICE
для использования этого API.источник
Для уровня API 28 или выше требуется разрешение FOREGROUND_SERVICE. В противном случае он не может работать и получил исключение.
Это будет решено добавлением
в файле AndroidManifest.xml.
источник
По
targetSdkVersion
крайней мере28
, с 1 ноября 2019 года будет обязательным для обновления приложений в Play Store. Таким образом, вам нужно изменить целевой API, а затем запросить разрешение,FOREGROUND_SERVICE
чтобы избежать сбоя наstartForeground()
источник
Отмечая, что
FOREGROUND_SERVICE
не требует требования разрешения во время выполнения. только добавить ниже к манифестамвышеуказанная строка должна быть добавлена до
<application
источник