[英]Using JobScheduler instead of BroadcastReceiver and Service
[英]How to implement Internet Connection listener for each Activity using JobScheduler and BroadcastReceiver
我想檢查用戶是否有可用的互聯網連接,並為他或其他自定義操作顯示Snackbar
。
應用的minSdk為23(Android 6.0)。
自Android 7.0起 ,對BroadcastReceiver
和接收連接狀態進行了一些更改。 現在,我必須使用JobScheduler
和Service
來檢查連接狀態。
我在這里找到了教程
但是他正在NetworkConnectionActivity
內部初始化JobScheduler
。 我在初始化其他服務(例如FirebaseMessagingService
)的Application
類開始時進行了此操作。
我想要實現的是在我的App中實現對多個Activity的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)
}
嘗試這個
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()
}
在此之前,您需要檢查調度程序當前是否正在運行的天氣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.