如何使JobScheduler重复运行以在应用程序运行时不断检查网络状态?

时间:2019-06-21 07:00:14

标签: android kotlin android-jobscheduler

我想让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
    }

但是,结果是相同的。它只运行一次。

我不知道是否相关,但我也收到了这些消息(不是错误,不是警告)。

0 个答案:

没有答案