2010-12-11 2 views
3

기본적으로 좋은 사마리아인이되기 위해 노력하는 응용 프로그램이 있습니다. 기본적으로 서비스가 시작되면 네트워크와 상호 작용해야합니다. 이 방법은 내가 사용자가 전화 또는 3G에 있기 때문에 나는 연결이없는 것을 알고 false를 반환하면네트워크 연결이 언제 반환되는지 알고 있습니다.

hasConnectivity 방법

private boolean hasConnectivity() { 
    NetworkInfo info = mConnectivity.getActiveNetworkInfo(); 
    boolean connected = false; 
    int netType = -1; 
    int netSubtype = -1; 

    if (info == null) { 
     Log.w(sTag, "network info is null"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "There is no network connectivity.", false); 
    } else if (!mConnectivity.getBackgroundDataSetting()) { 
     Log.w(sTag, "background data setting is not enabled"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "background data setting is disabled", false); 
    } else { 
     netType = info.getType(); 
     netSubtype = info.getSubtype(); 

     if (netType == ConnectivityManager.TYPE_WIFI) { 
      connected = info.isConnected(); 
     } else if (netType == ConnectivityManager.TYPE_MOBILE 
        && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS 
        && !mTelephonyManager.isNetworkRoaming() 
       ) { 
      connected = info.isConnected(); 
     } else if (info.isRoaming()) { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "Currently Roaming skipping check.", false); 
     } else if (info.isAvailable()) { 
      connected = info.isConnected(); 
     } else { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "..There is no network connectivity.", false); 
     } 
    } 
    return connected; 
} 

: 나는 장치가 연결되어 있는지 확인하고 및 WiFi를 사용할 수 없습니다.

주기적으로 타이머를 사용하여 네트워크 통계를 가져 오는 동안 연결이 가능할 때를 알 수있는 가장 좋은 방법은 무엇입니까?

브로드 캐스트 리시버에서 연결을 통해 변경 사항을 알릴 수있는 의도 동작이 있습니까?

어떤 도움을 주셔서 감사합니다. 다음에 수행 할 작업에 대한 실마리를 찾기 위해 문서를 계속 검색 할 것입니다.

답변

3

이것은 인터넷 액세스 (실제로는 Wifi가 네트워크에 연결되어 있고 연결되어있는 경우)와 같은 것입니다.

public class ConnectivityReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    if(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) 
    { 
     WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     MainMap.setWifiState(wm.getWifiState()); 
     Log.e("Debug", "Setting wifistate: " + wm.getWifiState()); 
    } else if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) 
    { 
     NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     MainMap.setConnected(ni.isConnected()); 
     Log.e("Debug", "Setting isConnected: " + ni.isConnected()); 
     if(ni.isConnected()) Toast.makeText(context, "Connected!", Toast.LENGTH_LONG).show(); 
    } 
} 

}

사용자가 3G 또는 와이파이에 있는지 확인하기 위해 너무 열심히해서는 안됩니다.

+0

문서를 탐색 할 때 감사합니다. ConnectivityManager.CONNECTIVITY_ACTION을 놓쳐 버려야합니다. 내가 바라는 바로 그 것이 었습니다. – Double

+0

검색과 저주의 시간을 알면 나 자신 외에 도움이되었습니다. – iarwain01

관련 문제