Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓,检查互联网连接_Android_Android Wifi_Connectivity - Fatal编程技术网

Android 安卓,检查互联网连接

Android 安卓,检查互联网连接,android,android-wifi,connectivity,Android,Android Wifi,Connectivity,我已经进行了一次很好的搜索,并尝试了我所看到的各种答案,但在我的案例中,它们似乎都不起作用。我正在寻找一个健壮的解决方案,因此,没有进一步的ado 我有一个不寻常的情况,我的应用程序需要连接到一个没有互联网连接的wifi网络来执行一些任务(本地网络),一旦完成,它需要断开连接并重新连接到另一个网络,无论是移动网络,还是具有互联网连接的另一个wifi热点,以便我可以进行通信 我遇到的问题是,我的通信队列需要确保它在即将开始进行通信时(在连接更改时触发)实际上有到internet的路由 我在Conn

我已经进行了一次很好的搜索,并尝试了我所看到的各种答案,但在我的案例中,它们似乎都不起作用。我正在寻找一个健壮的解决方案,因此,没有进一步的ado

我有一个不寻常的情况,我的应用程序需要连接到一个没有互联网连接的wifi网络来执行一些任务(本地网络),一旦完成,它需要断开连接并重新连接到另一个网络,无论是移动网络,还是具有互联网连接的另一个wifi热点,以便我可以进行通信

我遇到的问题是,我的通信队列需要确保它在即将开始进行通信时(在连接更改时触发)实际上有到internet的路由

我在ConnectionManager上尝试了各种调用,例如

isConnected();
isAvailable();
但即使连接到我不支持互联网的网络,这些也会返回真值

我需要一种方法来确保当连接到我的不支持互联网的网络(或任何其他不支持互联网的网络,例如BT Openzone,当没有注册和登录时)时,我可以被告知没有到互联网的路由,然后当我有路由时,我可以返回一个true

我考虑过的一种可能性是“平”,但如果可能的话,我更喜欢整洁一点的

我尝试了requestRouteToHost(),但这并没有达到我预期的效果,事实上,我试图改变连接,这不是我想要的

谢谢


公共类NetworkStateReceiver扩展了BroadcastReceiver{
公共void onReceive(上下文、意图){
super.onReceive(上下文、意图);
Log.d(“应用程序”、“网络连接更改”);
if(intent.getExtras()!=null){
NetworkInfo ni=(NetworkInfo)intent.getExtras().get(ConnectivityManager.EXTRA\u NETWORK\u INFO);
if(ni!=null&&ni.getState()==NetworkInfo.State.CONNECTED){
Log.i(“应用程序”、“网络”+ni.getTypeName()+“已连接”);
}
}
if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA\u NO\u CONNECTIVITY,Boolean.FALSE)){
XLog.d(“应用程序”,“没有网络连接”);
}
}
}

以下是我使用的方法:

public static boolean isNetworkAvailable(final Context context)  {
    return ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null;
}
以下是如何使用该方法:

if (isNetworkAvailable(context)) {
    // code here
} else {
    // code
}

这是我的接收版本的ConnectivityReporter。它使用不同的
API级别>=24的实现,我不认为此方法与我最初使用的方法有任何不同。它会正确地报告,以便存在活动连接,但不存在到远程主机的路由。这是否适用于没有连接的活动连接?我的问题已经很老了,但我想接受一个答案。我发现当时没有一个真正的解决方案(API智能)不需要ping远程主机或类似设备。它检测用户是否可以访问internet。我在我的所有应用程序中都使用它。如果没有互联网,这对wifi是不起作用的。如果第一次查询失败,您应该再次检查该值(例如ping 8.8.8.8)
if (isNetworkAvailable(context)) {
    // code here
} else {
    // code
}
ConnectivityReporter(context)
        .statesStream()
        .subscribe(
            { connected -> Timber.d("connectivity state: $connected") },
            { err -> Timber.d(err, "error") }
        )