2010-12-21 6 views
8

PhoneStateListener (또는 다른 메커니즘)를 구현하여 3G 또는 Wi-Fi 네트워크 연결이 복원되는 것을 감지 할 수 있습니까?3G 또는 Wifi 네트워크 복원 감지

API 요약에서 LISTEN_DATA_CONNECTION_STATE 및 LISTEN_DATA_ACTIVITY (셀룰러)가 모두 표시되는 것을 확인했습니다. 그것은 3G만을 의미합니까?

감사합니다.

답변

26

더 나은 방법은 android.net.ConnectivityManager 클래스를 사용하는 것입니다. 리시버를 등록하고 브로드 캐스트를 모니터하십시오.

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)) { 
       // Handle connected case 
      } 
     } else { 
      if ((aNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) 
       || (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)) { 
       // Handle disconnected case 
      } 
     } 
    } 
} 

private synchronized void startMonitoringConnection() { 
    IntentFilter aFilter = new IntentFilter(
     ConnectivityManager.CONNECTIVITY_ACTION); 
    registerReceiver(mConnectionReceiver, aFilter); 
} 
private synchronized void stopMonitoringConnection() { 
    unregisterReceiver(mConnectionReceiver); 
} 

mConnectionReceiver = new ConnectionMonitor(); 
+0

그것은 작동하지 않습니다! – meh

+0

정말이에요? 방송을 전혀받지 못했거나 무엇을 받았습니까? – Zelimir

+0

브로드 캐스트를 받지만 noConnectivity는 항상 false를 반환합니다. – meh

관련 문제