Android的网络状态变化检测需要时间 [英] Android network state change detection takes time
问题描述
我想检测我的Android应用程序的网络状态变化。我跟着这个问题的答案:检查意图互联网连接
这个作品,但它需要时间的广播接收器检测到的变化。当我打开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屋!