為何出現此錯誤訊息?Specify a valid range of job id's for WorkManager to use.,Should be replaced with Kotlin function

 你的 CloseAppJobService 使用了 JobService,但 JobService 需要透過 JobScheduler 正確排程,而不是直接讓 WorkManager 處理。


解決方法

  1. 確保 JobScheduler 取得有效的 Job ID,通常應該是 1 以上的整數。

  2. 確保 CloseAppJobServiceAndroidManifest.xml 註冊。

  3. 確保你的 JobService 設定為 android:permission="android.permission.BIND_JOB_SERVICE"


完整的修正程式碼

1. 修改 CloseAppJobService.kt

kotlin
package com.test.carcamping import android.app.job.JobParameters import android.app.job.JobService import android.os.Process class CloseAppJobService : JobService() { override fun onStartJob(params: JobParameters?): Boolean { // 強制關閉應用程式 Process.killProcess(Process.myPid()) System.exit(0) return false } override fun onStopJob(params: JobParameters?): Boolean { return false } }

2. 在 AndroidManifest.xml 註冊 JobService

<application> 標籤內新增:

xml
<service android:name=".CloseAppJobService" android:permission="android.permission.BIND_JOB_SERVICE" />

3. 在 MainActivity.kt 或適當位置啟動 JobScheduler

kotlin
import android.app.job.JobInfo import android.app.job.JobScheduler import android.content.ComponentName import android.content.Context fun scheduleAppCloseJob(context: Context) { val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler val componentName = ComponentName(context, CloseAppJobService::class.java) val jobInfo = JobInfo.Builder(123, componentName) // 123 是 Job ID,確保是正整數 .setMinimumLatency(5 * 60 * 1000) // 5 分鐘後執行 .setOverrideDeadline(5 * 60 * 1000) // 確保 5 分鐘後執行 .setRequiresDeviceIdle(false) .setRequiresCharging(false) .build() jobScheduler.schedule(jobInfo) }

調用方式:

kotlin
scheduleAppCloseJob(this) // 例如放在 onPause() 或其他合適的地方

為什麼這樣修改?

  1. 修正 Job ID 範圍錯誤

    • Job ID 需要是有效的整數 (123 是示範,實際可用 1 以上的數字)。

    • WorkManager 的錯誤訊息可能來自於 Job ID 錯誤。

  2. 確保 JobService 正確被系統執行

    • 透過 JobScheduler 正確啟動 CloseAppJobService

    • setMinimumLatency(5 * 60 * 1000) 確保應用程式 進入背景 5 分鐘後才關閉

  3. 確保 AndroidManifest.xml 設定正確

    • android:permission="android.permission.BIND_JOB_SERVICE"JobService 必須的權限。


最終效果

  • 當 App 進入背景時,5 分鐘後 JobService 會強制關閉 App

  • 即使應用程式被系統凍結,JobScheduler 仍然能執行,確保應用程式結束

沒有留言:

張貼留言

excel 最大值用max,取最小值但要排除0,要怎麼寫?

 =MIN(IF(A1:A10<>0, A1:A10))