【问题标题】:How to implement Internet Connection listener for each Activity using JobScheduler and BroadcastReceiver如何使用 JobScheduler 和 BroadcastReceiver 为每个 Activity 实现 Internet 连接侦听器
【发布时间】:2019-07-29 09:43:24
【问题描述】:

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

应用的 minSdk 为 23(Android 6.0)。

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

我找到了教程here

但他在NetworkConnectionActivity 中初始化JobScheduler。我在初始化其他服务的Application 类开始时执行此操作(如FirebaseMessagingService)。

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

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

示例代码:

    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)
    }

【问题讨论】:

    标签: android kotlin android-service android-jobscheduler android-connectivitymanager


    【解决方案1】:

    试试这个

    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()
    }
    

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

    【讨论】:

    • 试过了,它甚至没有从 NetworkSchedulerService 触发
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2017-10-27
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多