2014-07-14 10 views
0

시작시 내 앱에서 네트워크 연결을 확인합니다. Android 2.3 ~ 4.4 버전에서는 아래의 방법이 효과적입니다 (에뮬레이터 또는 실제 장치). Android L 미리보기 에뮬레이터에서이 메서드는 false로 돌아옵니다. - 내가 상속 프로젝트에 몇 가지 이상한 StringBuilder 물건이Android L의 ConnectivityManager 미리보기

// =============================================================== 
public static boolean haveNetworkConnection(Context ctx) { 

    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 
    boolean haveConnectedEthernet = false; 

    ConnectivityManager cm = (ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 

    for (NetworkInfo ni : netInfo) { 

     // String con = ni.isConnected() ? "Connected" : "Not Connected"; 

     if (!haveConnectedWifi) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) 
        haveConnectedWifi = true; 
     } 

     if (!haveConnectedMobile) { 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) 
        haveConnectedMobile = true; 
     } 

     if (!haveConnectedEthernet) { 
      if (ni.getTypeName().equalsIgnoreCase("ETHERNET")) 
       if (ni.isConnected()) 
        haveConnectedEthernet = true; 
     } 

     StringBuilder sb = new StringBuilder(); 
     sb.append(ni.getTypeName()).append(" ").append(ni); 


    } 
    return haveConnectedWifi || haveConnectedMobile 
      || haveConnectedEthernet; 
} 

,이 코드를 작성하지 않은 :

여기 내 코드입니다. 작동 이후 아무 것도 변경할 필요가 없습니다. 누구든지 ConnectivityManager 작동 방식을 변경하면 API가 있는지 알고 있습니까? dev site에서 API overview 개의 변경 사항을 확인했지만 관련 정보가 표시되지 않았습니다.

+0

여기에 sb의 용도는 무엇입니까? –

+0

@niteshgoel 편집 된 로깅 용입니다. – KickingLettuce

+1

형식 이름에 안정적인 API가 없습니다. 먼저 NetworkInfo.getType()을 사용하고 ConnectivityManager.TYPE_ * 상수를 확인하도록 변경합니다. – alanv

답변

1

유형 이름이 L로 변경되었습니다. 예를 들어 '모바일'대신 '셀룰러'를 선택해야합니다.