-4

我需要这个 kotlin 代码的帮助......我有 checkConnctivity() 函数,它工作得很好......

fun checkConnectivity(){

    val cm=getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork =cm.activeNetworkInfo
    val isConnected=activeNetwork != null && activeNetwork.isConnectedOrConnecting}

1 / 我尝试了不同的方式从其他活动中调用它,但我不能......如何解决它

2/我想在 webChromeClient 添加 checkConnectivity() 函数,所以每次 progressBarChanged 都会验证连接..但没有用

class ExodyaActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_exodya)

    //Problem1: failed to call the checkConnectivity() from MainActivity

    val myWebview   = ExoWeb
    var ProgressBar = progressBar
    var FrameLayout = frameLayout
    var TextView  = loadPrs

    myWebview.visibility = View.GONE
    frameLayout.visibility = View.GONE
    loadLinear.visibility = View.GONE

    //webview
    myWebview.webViewClient= WebViewClient()
    myWebview.settings.javaScriptEnabled=true
    myWebview.loadUrl("url")

    ProgressBar.max = 100

    myWebview.webChromeClient = object : WebChromeClient() {
        override fun onProgressChanged(view: WebView, progress: Int) {

            // Problem2: checkConnectivity()  didn't work here !!!!

            progressBar.progress = progress
            if(progress < 90) {
                loadPrs.text = " %" + progress
                myWebview.visibility = View.GONE
                frameLayout.visibility = View.VISIBLE
                loadLinear.visibility = View.VISIBLE
            }
            if (progress == 100) {

                FrameLayout.visibility = View.GONE
                loadLinear.visibility = View.GONE
                myWebview.visibility = View.VISIBLE
            }
        }
    }

}
// onBackPressed (back in webview history)
 override fun onBackPressed() {
     var myWebview   = ExoWeb
    if (myWebview.canGoBack()) {
        myWebview.goBack()
    } else {
         super.onBackPressed()
            Toast.makeText(this,"See You Next Time!",Toast.LENGTH_SHORT).show()
             }
        }

}

提前致谢 :)

4

1 回答 1

1
  1. 创建 Kotlin 文件,例如命名为Utils;
  2. 将函数移动到该文件,并添加Context参数:

    fun checkConnectivity(ctx: Context): Boolean {
        val cm = ctx.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork =cm.activeNetworkInfo
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting
    } 
    

    如果您打算仅在您可以创建不带参数的Activity扩展函数中使用它:Context

    fun Activity.checkConnectivity(): Boolean {
        val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork =cm.activeNetworkInfo
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting
    }
    
  3. 从您想要的任何地方调用该函数。如果您Activity只使用代码调用它:

    checkConnectivity(this@YourActivity)
    

    如果您创建了扩展函数,只需在Activity不传递任何参数的情况下调用它:

    checkConnectivity()
    
于 2018-12-25T16:51:22.997 回答