簡體   English   中英

如何使用JobScheduler和BroadcastReceiver為每個活動實現Internet連接偵聽器

[英]How to implement Internet Connection listener for each Activity using JobScheduler and BroadcastReceiver

我想檢查用戶是否有可用的互聯網連接,並為他或其他自定義操作顯示Snackbar

應用的minSdk為23(Android 6.0)。

Android 7.0起 ,對BroadcastReceiver和接收連接狀態進行了一些更改。 現在,我必須使用JobSchedulerService來檢查連接狀態。

我在這里找到了教程

但是他正在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM