前台服务在 Android 14 上崩溃

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

我有一个 Android 应用程序在 Android 13 之前运行良好。升级到 Android 14(将 targetSdkVersion 设置为 34)后,我的应用程序在 Android 14 上崩溃。这是我的崩溃日志。

java.lang.RuntimeException: Unable to start service com.example.bleapp.service.BleAppService@1d05078 with Intent { cmp=com.example.bleapp/.service.BleAppService }: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{718b5ad 5016:com.example.bleapp/u0a356} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory]
  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4839)
  at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2289)
  at android.os.Handler.dispatchMessage(Handler.java:106)
  at android.os.Looper.loopOnce(Looper.java:205)
  at android.os.Looper.loop(Looper.java:294)
  at android.app.ActivityThread.main(ActivityThread.java:8177)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
Caused by: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{718b5ad 5016:com.example.bleapp/u0a356} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory]
  at android.os.Parcel.createExceptionOrNull(Parcel.java:3057)
  at android.os.Parcel.createException(Parcel.java:3041)
  at android.os.Parcel.readException(Parcel.java:3024)
  at android.os.Parcel.readException(Parcel.java:2966)
  at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:6761)
  at android.app.Service.startForeground(Service.java:775)
  at com.example.bleapp.service.BleAppService.onStartCommand(BleAppService.kt:28)
  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4821)
  at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2289)
  at android.os.Handler.dispatchMessage(Handler.java:106)
  at android.os.Looper.loopOnce(Looper.java:205)
  at android.os.Looper.loop(Looper.java:294)
  at android.app.ActivityThread.main(ActivityThread.java:8177)
android service foreground-service android-14
1个回答
0
投票

从 Android 14 开始,您需要为前台服务声明特定权限,具体取决于您使用前台服务的用例。这是普通级别的权限,只需在清单中声明即可授予。可以在此处找到支持的权限列表以及用例。

https://developer.android.com/about/versions/14/changes/fgs-types-required#use-cases

示例:

<manifest ...>
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
  <application ...>
  <service
      android:name=".MyService"
      android:foregroundServiceType="location"
      android:exported="false">
  </service>
</application>
© www.soinside.com 2019 - 2024. All rights reserved.