Android的网络状态变化检测需要时间 [英] Android network state change detection takes time

查看:257
本文介绍了Android的网络状态变化检测需要时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想检测我的Andr​​oid应用程序的网络状态变化。我跟着这个问题的答案:检查意图互联网连接

这个作品,但它需要时间的广播接收器检测到的变化。当我打开WiFi或关闭,大约10秒后的onReceive()方法被调用。这是为什么需要这么多时间?谁能帮助?

感谢

下面是我的code:

 公共类NetworkStateReceiver扩展广播接收器{@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
    Log.d(应用程序,网络连通性的变化);
    如果(intent.getExtras()!= NULL){
        的NetworkInfo NI =(的NetworkInfo)intent.getExtras()得到(
                ConnectivityManager.EXTRA_NETWORK_INFO);
        如果(NI = NULL&放大器;!&安培; ni.getState()== NetworkInfo.State.CONNECTED){
            Log.i(应用程序,网络+ ni.getTypeName()+连接);
            Toast.makeText(上下文,连接,Toast.LENGTH_LONG).show();
        }否则如果(intent.getBooleanExtra(
                ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)){
            Toast.makeText(背景下,断开连接,Toast.LENGTH_LONG).show();
            Log.d(应用程序,没有网络连接);
        }
    }}}

在我的清单的应用程序标记:

 <接收机器人:名字=com.mypackage.NetworkStateReceiver>
        &所述;意图滤光器>
            <作用机器人:名字=android.net.conn.CONNECTIVITY_CHANGE/>
        &所述; /意图滤光器>
< /接收器>


解决方案

我找到了解决办法。

不是扩展广播接收器类和创建NetworkStateChangeReceiver的,我创建了我的活动一个BroadcastReceiver和注册它。现在,它的工作原理和的onReceive()方法被立即触发。

I am trying to detect network state change in my android app. I followed the answer in that question : Check INTENT internet connection

This works, but it takes time for broadcastreceiver to detect changes. When i turn wifi on or off, about 10 seconds later the onReceive() method is called. Why is that taking so much time? Can anyone help?

Thanks

Here is my code:

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");
        }
    }

}

}

and in my Manifest's application tag:

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

解决方案

I found the solution.

Instead of extending BroadcastReceiver class and creating NetworkStateChangeReceiver, i created a broadcastreceiver on my activity and registered it there. Now it works and onReceive() method is triggered immediately.

这篇关于Android的网络状态变化检测需要时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆