為何出現此錯誤訊息?Unresolved reference: scheduleAppCloseJob

 scheduleAppCloseJob(context) 是在 BootReceiver.kt 內呼叫的,但目前專案中 尚未定義這個函式,因此會出現 Unresolved reference: scheduleAppCloseJob 的錯誤。


解決方案

✅ 1. 確保 scheduleAppCloseJob 存在

你需要 手動定義 這個函式,讓 BootReceiver.kt 可以使用它。

🔹 請在 BootReceiver.kt 的同一個檔案內加上這段程式碼,或把它放到 CloseAppJobService.kt 裡:

kotlin
import android.app.job.JobInfo import android.app.job.JobScheduler import android.content.ComponentName import android.content.Context import android.os.Build fun scheduleAppCloseJob(context: Context) { val componentName = ComponentName(context, CloseAppJobService::class.java) val jobInfo = JobInfo.Builder(123, componentName) .setMinimumLatency(5 * 60 * 1000) // 5 分鐘後執行 .setOverrideDeadline(5 * 60 * 1000) // 最晚 5 分鐘內執行 .setRequiresDeviceIdle(false) .setRequiresCharging(false) .apply { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { setPersisted(true) // 確保重啟後仍有效 } } .build() val jobScheduler = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { context.getSystemService(JobScheduler::class.java) } else { context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler } jobScheduler?.schedule(jobInfo) }

✅ 2. 確保 BootReceiver.kt 正確

修改 BootReceiver.kt確認它可以正確呼叫 scheduleAppCloseJob

kotlin
import android.content.BroadcastReceiver import android.content.Context import android.content.Intent class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent?) { if (intent?.action == Intent.ACTION_BOOT_COMPLETED) { scheduleAppCloseJob(context) // 重新排程關閉 App 任務 } } }

✅ 3. 確保 AndroidManifest.xml 註冊了 BootReceiver

確保 AndroidManifest.xml 中有以下設定,讓 BootReceiver 能在開機時執行:

xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <receiver android:name=".BootReceiver" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>

📌 總結

🔹 問題原因scheduleAppCloseJob(context) 這個函式沒有定義,導致 BootReceiver.kt 找不到它。
🔹 解決辦法

  1. 新增 scheduleAppCloseJob(context) 函式

  2. 確保 BootReceiver.kt 內正確呼叫這個函式

  3. 確認 AndroidManifest.xmlRECEIVE_BOOT_COMPLETED 權限

這樣 BootReceiver 就能正常運作,不會出現 Unresolved reference: scheduleAppCloseJob 錯誤! 🚀

沒有留言:

張貼留言

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

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