Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
权限拒绝:startForeground需要android.Permission.FOREGROUND\u服务_Android_Android Service_Android Permissions - Fatal编程技术网

权限拒绝:startForeground需要android.Permission.FOREGROUND\u服务

权限拒绝:startForeground需要android.Permission.FOREGROUND\u服务,android,android-service,android-permissions,Android,Android Service,Android Permissions,最近,我们突然看到以下几个堆栈跟踪。为什么会这样?这是从应用程序尝试将音频评论服务移动到前台时开始的,包括媒体通知和所有内容 java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE at android.os.Parcel.createException(Parcel.jav

最近,我们突然看到以下几个堆栈跟踪。为什么会这样?这是从应用程序尝试将音频评论服务移动到前台时开始的,包括媒体通知和所有内容

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)或更高版本,并且没有声明使用
前台服务
权限,则会发生这种情况

来自Android 9:

想要使用前台服务的应用现在必须请求 前台服务权限优先。这是正常的许可,所以 系统会自动将其授予请求应用程序。开始 没有权限的前台服务抛出SecurityException

解决方案是在
AndroidManifest.xml
中添加以下内容:

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

...
...
...
权限拒绝:startForeground需要android.Permission.FOREGROUND\u服务

针对Android 9(API级别28)或更高版本并使用前台服务的应用程序必须请求
前台服务权限

所以现在我们需要添加清单文件

  • 它允许常规应用程序使用
    服务。startForeground
样本

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

前台\u服务
是一种普通权限,因此系统会自动将其授予请求应用程序。

  • 改变
前台服务权限

  • 摘要
想要使用前台服务的应用现在必须首先请求前台服务权限。这是正常权限,因此系统会自动将其授予请求应用程序。在没有权限的情况下启动前台服务会引发SecurityException

也读

  • 以API
    Build.VERSION\u CODES.P
    或更高版本为目标的应用程序必须请求权限
    Manifest.permission.前台\u服务
    ,才能使用此API

对于API级别28或更高的,需要前台服务许可。否则,它无法运行并出现异常

这将通过添加

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


在AndroidManifest.xml文件中

从2019年11月1日起,Play Store中的应用程序更新将强制要求至少
28
targetSdkVersion
。因此,您需要更改目标API,然后请求权限
前台\u服务
,以避免在
startForeground()

上崩溃,注意
前台\u服务
不需要运行时权限要求。仅将以下内容添加到清单中

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


上面的一行应该添加在
之前,这是否意味着如果我们的
targetSdkVersion
低于28,我们不需要任何权限就可以在运行28的设备上运行前台服务?这听起来像是一个奇怪的解决方案,可以降低targetSdkVersion@Sjd他们会安装得很好。这不像是
maxSdkVersion
。对您的答案进行投票,但发行说明并不是构建非向后兼容API的借口。在这种情况下,谷歌可以要求用户给予许可,或者至少提供一个提示,而不是默默地破坏应用程序。Android最近变得很难维护。@miladsalimi如果您在Android Studio中打开AndroidManifest.xml,您可以选择查看“合并清单”。也许有一个依赖项为您注入了权限使用?我已经添加了,但没有修复me@Kapilsoni我也遇到了同样的问题,添加了,但由于API 29权限不足,仍然崩溃,你设法解决了吗?先生,我尝试了你的解决方案,但它对我所有的android设备都不起作用。就像在Oppo F11 Pro中,它可以工作,但在三星、诺基亚和Mi手机应用程序崩溃,并在日志中出现相同的错误。你能告诉我我该如何修复吗?@Kapilsoni`在日志中出现相同的错误`你遇到了什么错误我遇到了这个错误“android.app.RemoteServiceException:startForeground的通知不正确:@Kapilsoni我知道这是一篇旧文章,但您是否尝试重新安装…?有时重新安装会修复此问题,如通知通道的重要性更改。