: 다음
private class ConnectionMonitor extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION))
return;
boolean noConnectivity = intent.getBooleanExtra(
ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
NetworkInfo aNetworkInfo = (NetworkInfo) intent
.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (!noConnectivity) {
if ((aNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
|| (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)) {
// start your service stuff here
}
} else {
if ((aNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
|| (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)) {
// stop your service stuff here
}
}
}
}
, 당신은 당신의 코드 어딘가에 인스턴스화 :
ConnectionMonitor connectionMonitor = new ConnectionMonitor();
registerReceiver(connectionMonitor, intentFilter);
참고 :이 코드는 Detect 3G or Wifi Network restoration
연결이 설정 될 때마다 서비스가 실행되지 않습니까? 시작시 한 번만 서비스를 실행하면되고 연결이 가능할 때까지 기다려야합니다. 그것은 이미'android.intent.action.BOOT_COMPLETED'을 청취하는 BroadcastReceiver에 있습니다. – Lunchbox
제 이해를 확인하십시오. 연결이 감지되는 즉시 서비스를 시작해야합니까? 그렇다면이 클래스를 공개 (자체 파일로)하고 startService (일부 컨텍스트를 전달해야 함) 메소드를 올바른 위치에두고 인스턴스 활동에서 BR을 인스턴스화하고 등록 할 수 있습니다. (서비스가 시작될 때 등록을 잊지 말것) – znat
@Lunchbox : BOOT_COMPLETED 수신기에서 서비스를 시작했다는 것을 나타 냈습니다. 이미 인터넷에 연결되어 있지 않다고 판단되면이 응답의 코드가 해당 서비스로 전송됩니다. 사용자가 단순히 인터넷에 접속할 수 없거나 Android 4.0 이상에서 대역폭 할당량을 초과 한 경우 어떤 종류의 시간 초과 메커니즘이 필요할 수도 있습니다. – CommonsWare