foregroundServiceType 0x00000001 不是清单文件的服务元素中 foregroundServiceType 属性 0x00000000 的子集

问题描述 投票:0回答:1

我已经使用 WorkManager 实现了 Foreground Service,它在 API Level 33 之前都可以正常工作。由于在 API Level 34 中必须指定 foregroundServiceType,所以我在 Worker 和 Manifest 中指定了它,但收到了此错误。

AndroidManifest.xml

所需权限:

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

<service
        android:name=".services.DownloadService"
        android:exported="false"
        android:enabled="true"
        tools:node="merge"
        android:foregroundServiceType="mediaPlayback"/>

内部工人:

 setForegroundAsync(
       ForegroundInfo(
            NOTIFICATION_ID,
            getNotification(),
            ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
       )
  )

出现此错误

java.lang.IllegalArgumentException:foregroundServiceType 0x00000001 不是 foregroundServiceType 属性 0x00000000 的子集 清单文件的服务元素位于 android.os.Parcel.createExceptionOrNull(Parcel.java:3015)
在 android.os.Parcel.createException(Parcel.java:2995)
在 android.os.Parcel.readException(Parcel.java:2978)
在 android.os.Parcel.readException(Parcel.java:2920)
在 android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:6079) 在 android.app.Service.startForeground(Service.java:797) ...

我试着到处做一些改变,但没有任何效果。

android-workmanager foreground-service android-14
1个回答
0
投票

错误消息表明您用于调用服务的 foregroundServiceType 未在 Manifest 中声明。您似乎已在清单中将服务类型声明为“mediaPlayback”,并尝试将其启动为“dataSync”。您还可以为您的服务定义多个foregroundServiceType,并在启动服务时使用其中之一,具体取决于您启动服务的用例。要在声明中提供多种类型,您可以用管道 (|) 符号分隔所有类型。尝试按如下方式更改代码或删除 mediaPlayback(如果不需要)。

<service
    android:name=".services.DownloadService"
    android:exported="false"
    android:enabled="true"
    tools:node="merge"
    android:foregroundServiceType="dataSync|mediaPlayback"/>

参考:https://developer.android.com/about/versions/14/changes/fgs-types-required

© www.soinside.com 2019 - 2024. All rights reserved.