提问者:小点点

从服务中检查Android中的Internet连接(Kotlin)


我需要一个安卓的互联网检查服务。 以下是完整的服务代码:

package com.example.myserviceexample

import android.app.Service
import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager
import android.net.NetworkInfo
import android.os.IBinder
import android.util.Log

class MyService : Service() {

    val TAG = "My Service"

    override fun onBind(intent: Intent): IBinder? {
        return null
    }

    override fun onCreate() {
        showLog("onCreate")
        super.onCreate()
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        showLog("onStartCommand")

        val runnable = Runnable {
            for(i in 1..100){
                val flag = isInet(this)
                showLog("Service doing something. " +i.toString()+" "+ flag.toString())
                //write_str(i.toString())
                Thread.sleep(1000)
            }
            stopSelf()
        }

        val thread = Thread(runnable)
        thread.start()

        return super.onStartCommand(intent, flags, startId)
    }

    override fun onDestroy() {
        showLog("onDestroy")
        super.onDestroy()
    }

    fun showLog(message: String){
        Log.d(TAG, message)
    }

    fun isInet(context: Context):Boolean{
        val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
        return activeNetwork?.isConnectedOrConnecting == true
    }
}

函数isInet在正常的Android应用程序中正常工作。 在服务中,它总是返回true(即使在没有连接的情况下)。 帮助它工作。


共1个答案

匿名用户

在islnet函数中尝试使用“return activeNetwork?。isconnected?:false”