2014-07-14 62 views
0

我的应用程序在启动时检查网络连接。在Android 2.3到4.4版本中,下面的方法很好(无论是仿真器还是实际设备)。在Android L预览模拟器上,该方法返回false。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; 
} 

有一些奇怪的东西StringBuilder,我没有创建此代码 - 这是我继承了一个项目。自从它工作以来,我不需要改变任何东西。有谁知道ConnectivityManager的工作方式是否有API更改?我检查了dev site上的API overview更改,但未看到任何相关信息。

+0

这里sb有什么用? –

+0

@niteshgoel这是用于已编辑的日志记录。 – KickingLettuce

+1

类型名称没有稳定的API。首先将其更改为使用NetworkInfo.getType()并根据ConnectivityManager.TYPE_ *常量进行验证。 – alanv

回答

1

Typename已在L中更改,例如应选中“Cellular”而不是“MOBILE”。

相关问题