【发布时间】:2019-07-29 09:43:24
【问题描述】:
我想检查用户是否有可用的互联网连接,并为他或其他自定义操作显示Snackbar。
应用的 minSdk 为 23(Android 6.0)。
自 Android 7.0 以来,BroadcastReceiver 和接收连接状态发生了一些变化。现在我必须使用JobScheduler 和Service 来检查连接状态。
我找到了教程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