7.0.1版本小米澎湃os,开启前台服务无限闪退

安卓系统版本 安卓14,
Screenshot_2024-08-09-00-14-10-500_com.android.settings.jpg

报错信息

设备信息:
App version: 7.0.1
App version code: 701
Android build version: V816.0.24.5.27.DEV
Android release version: 14
Android SDK version: 34
Android build ID: UKQ1.231003.002 release-keys
Device brand: Redmi
Device manufacturer: Xiaomi
Device name: apollo
Device model: M2007J3SC
Device product name: apollo
Device hardware name: qcom
ABIs: [arm64-v8a, armeabi-v7a, armeabi]
ABIs (32bit): [armeabi-v7a, armeabi]
ABIs (64bit): [arm64-v8a]

错误信息:
android.app.MissingForegroundServiceTypeException: Starting FGS without a type callerApp=ProcessRecord{429cbe3 8151:org.autojs.autoxjs.v7/u0a340} targetSDK=34
java.lang.RuntimeException:Unable to create service org.autojs.autojs.external.foreground.ForegroundService: android.app.MissingForegroundServiceTypeException: Starting FGS without a type callerApp=ProcessRecord{429cbe3 8151:org.autojs.autoxjs.v7/u0a340} targetSDK=34
android.app.ActivityThread.handleCreateService(ActivityThread.java:4891)
......
Caused by:
android.app.MissingForegroundServiceTypeException:Starting FGS without a type callerApp=ProcessRecord{429cbe3 8151:org.autojs.autoxjs.v7/u0a340} targetSDK=34
android.app.MissingForegroundServiceTypeException$1.createFromParcel(MissingForegroundServiceTypeException.java:53)
android.app.MissingForegroundServiceTypeException$1.createFromParcel(MissingForegroundServiceTypeException.java:49)
android.os.Parcel.readParcelableInternal(Parcel.java:4870)
android.os.Parcel.readParcelable(Parcel.java:4852)
android.os.Parcel.createExceptionOrNull(Parcel.java:3052)
android.os.Parcel.createException(Parcel.java:3041)
android.os.Parcel.readException(Parcel.java:3024)
android.os.Parcel.readException(Parcel.java:2966)
android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7280)
java.lang.reflect.Method.invoke(Native Method)
leakcanary.ServiceWatcher$install$4$2.invoke(ServiceWatcher.kt:93)
java.lang.reflect.Proxy.invoke(Proxy.java:1006)
$Proxy6.setServiceForeground(Unknown Source)
android.app.Service.startForeground(Service.java:775)
org.autojs.autojs.external.foreground.ForegroundService.startForeground(ForegroundService.java:51)
org.autojs.autojs.external.foreground.ForegroundService.onCreate(ForegroundService.java:40)
android.app.ActivityThread.handleCreateService(ActivityThread.java:4878)
android.app.ActivityThread.-$$Nest$mhandleCreateService(Unknown Source:0)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2410)
android.os.Handler.dispatchMessage(Handler.java:106)
android.os.Looper.loopOnce(Looper.java:224)
android.os.Looper.loop(Looper.java:318)
android.app.ActivityThread.main(ActivityThread.java:8770)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)

根据你提供的错误信息,“MissingForegroundServiceTypeException”通常与前台服务的类型不明确有关。这可能是因为在较新的Android版本中,前台服务的类型需要在Manifest中明确声明。以下是一些可能的解决方案:

解决方案

  1. 检查AndroidManifest.xml
    确保在你的AndroidManifest.xml中声明了合适的前台服务类型。根据Android 9(API 28)及以后的版本,前台服务必须声明服务的类型。下面是一个示例:

    <service
        android:name=".YourForegroundService"
        android:foregroundServiceType="location|dataSync"  <!-- 根据需要添加相应的类型 -->
        android:permission="android.permission.FOREGROUND_SERVICE">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </service>
    

    foregroundServiceType中可以使用多个类型(使用|连接),根据你的实际需求选择即可。

  2. 更新Auto.js
    确保你使用的是最新版本的Auto.js,因为一些已知的问题可能会在新版本中得到修复。

  3. 使用特定权限
    确保你的应用请求了FOREGROUND_SERVICE权限:

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    
  4. 模拟前台服务
    如果你的应用依赖于前台服务但在某些设备上出现问题,考虑是否可以通过其他方法(如异步任务)来模拟前台服务的行为,并减少对前台服务的依赖。

  5. 测试与调试
    尝试在其他设备或Android版本上运行你的应用,查看是否仍然出现相同的问题。这可以帮助你确认问题是否与特定设备的实现有关。

总结

这个问题通常与前台服务的声明和使用有关,确保你的实现符合目标设备的要求是关键。通过以上步骤,你能够定位并解决这个问题。同时,也建议关注Auto.js的社区和文档,以了解关于前台服务的最佳实践。希望这些信息能够帮助你解决问题!