在没有上下文的情况下检查Android连接

5
我想知道在Android中是否可以在没有Context的情况下检查连接性,因为我在后台运行的线程不知道上下文。如果没有其他方法,将上下文传递给线程是否是最佳实践?
谢谢。

连接性是什么意思? - Anthony Forloney
如果我有WiFi或3G连接,我知道我必须使用ConnectivityManager类,但问题是我是否需要上下文。 - Gerardo
3个回答

4

是的,你需要Context。可能,你的线程已经可以访问Context了,这要归功于使用ActivityService内部类作为Runnable的线程。


我需要从可运行对象检查连接性,但我不知道线程。 - Gerardo

1
你可以使用以下方法:

Kotlin :

fun isNetworkAvailable1(): Boolean {
        val runtime = Runtime.getRuntime()
        try {
            val ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8")
            val exitValue = ipProcess.waitFor()
            return exitValue == 0
        } catch (e: IOException) {
            e.printStackTrace()
        } catch (e: InterruptedException) {
            e.printStackTrace()
        }
        return false
    }

Java:
public static boolean isNetworkAvailable () {
    Runtime runtime = Runtime.getRuntime();
    try {
        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int     exitValue = ipProcess.waitFor();
        return (exitValue == 0);
    } catch (IOException e){
          e.printStackTrace();
    } catch (InterruptedException e){
          e.printStackTrace();
    }
    return false;
}

-1

你的可运行对象将在 Activity 或 Service 内运行,因此它将可以访问其方法。

我认为你可以简单地这样做:

OuterClassName.this.getContext();

不是内部类,因为可运行对象在另一个Java文件中定义。 - Gerardo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接