Отказ в разрешении: startForeground требует android.permission.FOREGROUND_SERVICE - PullRequest
0 голосов
/ 18 сентября 2018

В последнее время мы внезапно увидели несколько следующих следов стека.Почему это может быть?Это происходит из-за того, что приложение пытается переместить службу аудиокомментариев на передний план с уведомлением мультимедиа и всем остальным.

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)

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Отказ в разрешении: startForeground требует android.permission.FOREGROUND_SERVICE

Приложения, предназначенные для Android 9 (уровень API 28) или выше и использующие службы переднего плана, должны запросить FOREGROUND_SERVICE permission.

Так что теперь нам нужно добавить Разрешение службы Foreground в файле манифеста

  • Позволяет обычному приложению использовать Service.startForeground

ОБРАЗЕЦ

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

FOREGROUND_SERVICE - это обычное разрешение, поэтому система автоматически предоставляет его запрашивающему приложению.

Проверьте это примечания по миграции Android 9 / Pie

  • Изменить

Разрешение на обслуживание переднего плана

  • Резюме

Приложения, желающие использовать службы переднего плана, теперь должны сначала запросить разрешение FOREGROUND_SERVICE. Это нормальное разрешение, поэтому система автоматически предоставляет его запрашивающему приложению. Запуск службы переднего плана без разрешения вызывает исключение SecurityException.

Также прочитано startForeground()

  • Приложения, нацеленные на API Build.VERSION_CODES.P или более поздней версии, должны запросить разрешение Manifest.permission.FOREGROUND_SERVICE для использования этого API.
0 голосов
/ 18 сентября 2018

Это то, что вы получаете за неправильное чтение заметок о выпуске.Это начало происходить при установке targetSdkVersion = 28 (Android 9 / Pie) и четко указано, например, в примечаниях по миграции :

Приложения, желающие использовать службы переднего плана, теперь должны запрашивать FOREGROUND_SERVICEразрешение сначала.Это нормальное разрешение, поэтому система автоматически предоставляет его запрашивающему приложению.Запуск службы переднего плана без разрешения вызывает исключение SecurityException.

Итак, , решение состоит в том, чтобы просто добавить следующее в AndroidManifest.xml:

<manifest ...>
     ...
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     ...
     <application ...>
     ...
</manifest>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...