我编写了以下代码,用于检测BroadcastReceiver中的网络状态。我在网络可用时启动服务,并在网络不可用时停止服务。
我有以下类级变量。
private boolean IsNetworkAlreadyConnected = false;
在主类的onCreate方法中,如果互联网可用,我将启动该服务。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (InternetConnectivity.isConnected(MainActivity.this)) {
IsNetworkAlreadyConnected = true;
Intent timerIntent = new Intent(getBaseContext(), InActivityTimer.class);
startService(timerIntent);
}
}
及以下是我在同一类中的BroadcastReceiver的代码,
public class mConnectivityCheckReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("android.net.conn.CONNECTIVITY_CHANGE")) {
try {
boolean networkAvailable = InternetConnectivity.isConnected(context);
if (networkAvailable) {
if (!IsNetworkAlreadyConnected) {
Intent timerIntent = new Intent(getBaseContext(), InActivityTimer.class);
startService(timerIntent);
IsNetworkAlreadyConnected = true;
}
else {
Log.d("KC_HomeActivity", "Network was already connected. No need to start service again.");
}
}
else {
Log.d("KC_HomeActivity", "Network Disconnected. Service Stopped.");
IsNetworkAlreadyConnected = false;
Intent timerIntent = new Intent(getBaseContext(), InActivityTimer.class);
stopService(timerIntent);
}
}
catch (Exception e) {
}
}
}
};
当移动数据和Wifi都打开时,服务从onCreate方法启动,并且不会在BroadcastReceiver中再次启动,但是当我关闭Wifi时,Android会将网络模式更改为移动数据,但几秒钟就会出现没有互联网连接,服务停止然后再次启动。我不想这样做。如果只有连接,则应停止服务。如果网络正在从Wifi转移到移动数据,则不应停止服务。
注意:要检查我正在使用的互联网连接,
NetworkInfo info = InternetConnectivity.getNetworkInfo(context);
return (info != null && info.isConnectedOrConnecting());
答案 0 :(得分:2)
网络连接并不精确。你应该放松一下,否则你会把头发拉出来。
我会从广播中实现平滑功能。当您收到连接更改通知时,请将超时设置为15秒。那时,检查您的状态,然后启动,停止或不执行任何操作。如果另一个广播进入,清除第一个并重置另外15秒。这将使设备有时间重新连接。