从 Android 9的迁移说明: 想要使用前台服务的应用程序现在必须请求 首先是FOREGROUND_SERVICE权限.这是正常权限,所以 系统会自动将其授予请求的应用程序.开始一个 未经许可的前台服务会引发SecurityException. 解决方案是仅在AndroidManifest.xml中添加以下内容: <manifest ...> ... <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> ... <application ...> ...</manifest>Lately we have suddenly been seeing a few of the following stack traces. Why could that be? This is from when the app tries to move an audio commentary service into the foreground with a media notification and everything.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) 解决方案 This will happen if you have set targetSdkVersion = 28 (Android 9 / Pie) or above and have not declared the usage of the FOREGROUND_SERVICE permission.From the migration notes for Android 9: Apps wanting to use foreground services must now request the FOREGROUND_SERVICE permission first. This is a normal permission, so the system automatically grants it to the requesting app. Starting a foreground service without the permission throws a SecurityException.The solution is to just add the following in AndroidManifest.xml:<manifest ...> ... <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> ... <application ...> ...</manifest> 这篇关于拒绝权限:startForeground需要android.permission.FOREGROUND_SERVICE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-01 11:41