Android网络状态变化检测需要时间

时间:2014-08-14 10:21:22

标签: android broadcastreceiver

我正在尝试在我的Android应用中检测网络状态更改。我按照那个问题回答了问题:Check INTENT internet connection

这是有效的,但广播接收者需要时间来检测变化。当我打开或关闭wifi时,大约10秒后调用onReceive()方法。为什么花这么多时间?有人可以帮忙吗?

由于

这是我的代码:

public class NetworkStateReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Log.d("app", "Network connectivity change");
    if (intent.getExtras() != null) {
        NetworkInfo ni = (NetworkInfo) intent.getExtras().get(
                ConnectivityManager.EXTRA_NETWORK_INFO);
        if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
            Log.i("app", "Network " + ni.getTypeName() + " connected");
            Toast.makeText(context, "CONNECTED", Toast.LENGTH_LONG).show();
        } else if (intent.getBooleanExtra(
                ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
            Toast.makeText(context, "DISCONNECTED", Toast.LENGTH_LONG).show();
            Log.d("app", "There's no network connectivity");
        }
    }

}

}

并在我的Manifest的应用程序标签中:

<receiver android:name="com.mypackage.NetworkStateReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
</receiver>

3 个答案:

答案 0 :(得分:6)

我找到了解决方案。

我没有扩展BroadcastReceiver类并创建NetworkStateChangeReceiver,而是在我的活动上创建了一个broadcastreceiver并在那里注册了它。现在它可以工作,并立即触发onReceive()方法。

答案 1 :(得分:0)

public static boolean isInternetAvailable(Context context) {
    boolean isConnection = false;
    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null) {
        NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
        if (info != null) {
            for (int index = 0; index < info.length; index++) {
                if (info[index].getState() == NetworkInfo.State.CONNECTED) {
                    isConnection = true;
                    break;
                }
            }
        }
    }
    return isConnection;
}

答案 2 :(得分:0)

我的应用程序中有类似的代码来检测是否存在连接,并提示用户连接状态更改。

在我的应用程序中,它会在一秒钟内收到断开连接的连接更改,但是当你打开WiFi时,大约需要7秒才能收到连接状态的变化。

然而,我收到的状态更改与Android发出的声音“连接到Wi-Fi网络[您的网络名称]”完全相同。

您可能会在连接到网络时同时收到更改,而不是在您按下Wi-Fi切换按钮以打开它时。

是否有特殊原因需要从按下切换开关时的即时反馈?