我想检查用户是否有可用的互联网连接并Snackbar
为他显示或其他自定义操作。
应用的 minSdk 为 23 (Android 6.0)。
自Android 7.0BroadcastReceiver
以来,连接状态和接收状态发生了一些变化。现在我必须使用JobScheduler
并Service
检查连接状态。
我在这里找到了教程
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)
}