0

我想检查用户是否有可用的互联网连接并Snackbar为他显示或其他自定义操作。

应用的 minSdk 为 23 (Android 6.0)。

Android 7.0BroadcastReceiver以来,连接状态和接收状态发生了一些变化。现在我必须使用JobSchedulerService检查连接状态。

我在这里找到了教程

JobScheduler但他在里面初始化NetworkConnectionActivity。我在Application初始化其他服务的课程开始时这样做(例如FirebaseMessagingService)。

我想要实现的是ConnectivityReceiverListener在我的应用程序中实现多个活动,并onNetworkConnectionChanged在连接更改时覆盖以获取信息。我将根据当前状态对此状态做出自定义反应Activity

此解决方案的问题:当我在其中实现该侦听器时,MainActivity它不会被触发。onNetworkConnectionChanged但是里面的吐司NetworkSchedulerService被解雇了

示例代码:

    class MainActivity : AppCompatActivity(), ConnectivityReceiver.ConnectivityReceiverListener{


        var mConnectionSnackbar: Snackbar? = null
        override fun onNetworkConnectionChanged(isConnected: Boolean) {
            App.log("ConnectionChanged: $isConnected")
            app.isConnected = isConnected
            maybeShowConnectionSnackbar(isConnected)
        }

        fun maybeShowConnectionSnackbar(isConnected: Boolean){
            if (isConnected){
                mConnectionSnackbar?.dismiss()
            } else {
                if (mConnectionSnackbar == null){
                    mConnectionSnackbar = Snackbar.make(content, "Connection Lost", Snackbar.LENGTH_INDEFINITE)
                }
            }
        }
     **** onCreate and variable init ***
    }

课堂功能Application

private fun createConnectivityJobScheduler(){
        val myJob = JobInfo.Builder(0, ComponentName(this, NetworkSchedulerService::class.java))
                .setMinimumLatency(1000)
                .setOverrideDeadline(2000)
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                .setPersisted(true)
                .build()

        val jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
        jobScheduler.schedule(myJob)
    }
4

1 回答 1

0

尝试这个

val serviceComponent = ComponentName(context, CallJob()::class.java)
val builder = JobInfo.Builder(0, serviceComponent)
builder.setMinimumLatency((30000).toLong())
builder.setOverrideDeadline((300000).toLong())
val jobScheduler = context.getSystemService(JobScheduler::class.java)

try {
    jobScheduler.schedule(builder.build())
} catch (e: Exception) {
    e.printStackTrace()
}

在此之前,您需要检查调度程序当前是否正在运行的天气..

于 2019-07-29T10:34:00.450 回答