Как я могу заставить JobScheduler запускаться несколько раз, чтобы постоянно проверять состояние сети во время работы приложения? - PullRequest
0 голосов
/ 21 июня 2019

Я хочу, чтобы 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
    }

Однако результат тот же. Он запускается только один раз.

И я не знаю, связано ли это, но я тоже получаю эти сообщения (не ошибка, не предупреждение).

...