最近,我们突然看到以下几个堆栈跟踪。为什么会这样?这是从应用程序尝试将音频评论服务移动到前台时开始的,包括媒体通知和所有内容。
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)
注意到FOREGROUND_SERVICE
不需要运行时权限要求
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
应在
权限拒绝:startForeground需要android。准许前台服务
针对Android 9(API级别28)或更高版本并使用前台服务的应用程序必须请求前台服务权限
。
所以现在我们需要在清单文件中添加前台服务权限
服务。起始地面
样品
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
在Android 9/Pie的迁移说明中选中此项
前台服务权限
想要使用前台服务的应用现在必须首先请求FOREGROUND_SERVICE权限。这是正常权限,因此系统会自动将其授予请求应用。在没有权限的情况下启动前台服务会引发SecurityExcure。
另请阅读startForeground()
Build的应用程序。版本代码。P或更高版本必须请求权限清单。准许前台_服务
以使用此API
如果您设置了targetSdkVersion=28
(Android 9/Pie)或更高版本,并且没有声明使用前台服务
权限,则会发生这种情况。
从Android 9的迁移注意事项:
想要使用前台服务的应用现在必须首先请求前台服务权限。这是正常权限,因此系统会自动将其授予请求应用程序。在没有权限的情况下启动前台服务会引发SecurityException。
解决方案是只需在AndroidManifest.xml
中添加以下内容:
<manifest ...>
...
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
...
<application ...>
...
</manifest>
我添加了使用权限,包括WRITE_EXTERNAL_STORAGE,android.permission.相机,READ_EXTERNAL_STORAGEAndroidManifest.xml. 当我在Nexus6(API 24)中运行我的应用程序时,它向我抛出了以下错误: java.io.IOException:权限被拒绝 这是我的代码: 如何在权限相机运行时打开之前使用它?
在android studio中运行应用程序时,我遇到了权限被拒绝的问题。在此之前,我需要声明,我的队友可以运行代码并弹出数据,但我,我们都使用相同的代码和版本,但我使用的是mac,他们使用的是win系统。 以下是logcat信息: 下面是AndroidMainfest文件:For tools sLtaretApi="31"我尝试删除并运行没有任何更改 有人能给我一些解决这个问题的建议吗?感谢任何
在构建TargetSDKVersionV29时,我无法访问存储。 下面是我的分级配置: 请注意,已授予权限,并且在构建时,相同的设置工作良好。 下面是我的实现:
当我调用getLastKnownLocation()方法时,我得到一个错误“Java Android call Required permission which may be rejection by user...”。显然是因为API23。我还找不到有效的解决办法。