我想让JobScheduler实时检查互联网是否已连接。
我将JobScheduleerService
设置为Manifests.xml
...
<service
android:name=".service.JobSchedulerService"
android:enabled="true"
android:permission="android.permission.BIND_JOB_SERVICE" />
...
这是JobSchedulerService
的类,它只运行一次。
class JobSchedulerService : JobService() {
override fun onStartJob(params: JobParameters): Boolean {
Log.d("scheduler", "onStartJob(): ${params.jobId}")
jobFinished(params, false) // I've tried it with true(wantsReschedule) but didn't work. still works once.
return false // also I've set it to true, but no repeatition.
}
override fun onStopJob(params: JobParameters): Boolean {
Log.d("scheduler", "onStopJob(): ${params.jobId}")
return false
}
}
我认为它应该每2秒运行一次,如下所示。
这是MainActivity.kt
private var mJobScheduler: JobScheduler? = null
...
private fun runJobScheduler() {
Log.d("scheduler", "runJobScheduler()")
mJobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
val jobInfo = JobInfo.Builder(1, ComponentName(packageName, JobSchedulerService::class.java.name))
.setMinimumLatency(2000) // 2 seconds.
.build()
if (mJobScheduler == null || mJobScheduler!!.schedule(jobInfo) <= 0) {
Toast.makeText(this@MainActivity, "JobScheduler: Something went wrong", Toast.LENGTH_SHORT).show()
} else {
mJobScheduler!!.schedule(jobInfo) // Job is scheduled.
}
}
我想创建一个JobScheduler来检查手机的网络(WIFI,3G,LTE等)是否连接。并通过对话框通知用户。
我认为,它只运行一次。因此,我实现了这种方法来检查它是否正在运行。
private fun isJobIdRunning(context: Context, jobId: Int): Boolean {
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
for (jobInfo in jobScheduler.allPendingJobs) {
if (jobInfo.id == jobId) {
return true
}
}
return false
}
但是,结果是相同的。它只运行一次。
我不知道是否相关,但我也收到了这些消息(不是错误,不是警告)。