ANDROID:如果WiFi已启用且处于活动状态,请启动一个意向

这是我想要做的:

=>如果WiFi已启用且处于活动状态,则启动一个意图(实际上,它是一个WebView,它的内容=>我的应用在networking上的指示)

=>如果不是,那么我会启动另一个意图,以便我不显示WebView与“网页不可用… http://www.mywebsite.com网页可能会暂时closures或可能有感动……“

我最初使用

如果(wifi.isWifiEnabled())

但是这并不表示Wifi连接是否为ACTIVE。 它只是说,用户已经打开了开关。 设备可能连接也可能不连接…这是正确的吗?

然后我试着用:

if(wifi.getConnectionInfo()。getSSID()!= null)

但我注意到,即使连接已经丢失或被禁用,它会返回一个string…?

那我该怎么办?

wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); Intent intent_instructions; if (wifi.getConnectionInfo().getSSID()!= null){ Log.i("Hub", "WiFi is enabled AND active !"); Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID()); intent_instructions = new Intent(this, Instructions.class); }else{ Log.i("Hub", "NO WiFi"); intent_instructions = new Intent(this, Instructions_No_WiFi.class); } this.startActivity(intent_instructions); 

有没有更通用的方法来testing设备是否在启动一个意图之前就连接到了互联网? 通过Wifi,3G等等

在此先感谢您的帮助。

Solutions Collecting From Web of "ANDROID:如果WiFi已启用且处于活动状态,请启动一个意向"

您可以使用下面的代码来检查连通性:

 private static boolean isConnected(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = null; if (connectivityManager != null) { networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); } return networkInfo == null ? false : networkInfo.isConnected(); } 

请确保您已在您的Manifest中注册了android.net.conn.CONNECTIVITY_CHANGE意图,否则您将永远收不到您在线的通知。

在过去的几天里,我一直在解决这个问题,我刚才意识到我需要注册CONNECTIVITY_CHANGE,而不仅仅是WIFI_STATE_CHANGED。

尝试android.net.ConnectivityManager.getActiveNetworkInfo() :如果它返回null你没有连接; 如果它返回一个NetworkInfo对象,你可以用NetworkInfo.getState()检查连接的状态,如果是NetworkInfo.State.CONNECTED那么你连接了,否则你不是。

你可以这样做:

  @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)){ Log.d("WIFI", "WIFI has changed"); int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1); Log.d("WIFI", "WIFI State = " + wifiState); setCurrentWifiState(wifiState); } 

您将获得0,1,2,3取决于Wifi所处的状态,例如2连接,您可以检查文档中的其余部分

在你的BroadcastReceiver类中:

 @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){ boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); if (connected){ // start your service here } } } 

并在你的AndroidManifest.xml确保你注册了android.net.wifi.supplicant.CONNECTION_CHANGE广播意图。

 <intent-filter > <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> </intent-filter> 

isConnected()完全正常工作,研究别的东西

 final ConnectivityManager connMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if( wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){ Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); } else if( mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED ){ Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); } 

这个代码检查,如果你是无线或3G或无,在无线networking的情况下,但没有连接到一个networking或3G有信号的问题,它检测到这个细节, DetailedStates