ANDROID:如果WiFi已启用并处于活动状态,则启动一个intent

ANDROID:如果WiFi已启用并处于活动状态,则启动一个intent,android,wifi,internet-connection,Android,Wifi,Internet Connection,这就是我想做的: =>如果WiFi已启用且处于活动状态,则启动一个意图(事实上,它是一个获取其内容的网络视图=>我的应用程序在web上的说明) =>如果没有,那么我将启动另一个意图,这样我就不会显示带有“网页不可用…处的网页可能暂时关闭或已移动…”的Web视图 我最初想用 if(wifi.isWifiEnabled()) 但这并不是说Wifi连接是否处于活动状态。它只说用户已经打开了开关。设备可能已连接,也可能未连接。。。这是正确的吗 然后我尝试使用: 如果(wifi.getConnection

这就是我想做的:

=>如果WiFi已启用且处于活动状态,则启动一个意图(事实上,它是一个获取其内容的网络视图=>我的应用程序在web上的说明)

=>如果没有,那么我将启动另一个意图,这样我就不会显示带有“网页不可用…处的网页可能暂时关闭或已移动…”的Web视图

我最初想用

if(wifi.isWifiEnabled())

但这并不是说Wifi连接是否处于活动状态。它只说用户已经打开了开关。设备可能已连接,也可能未连接。。。这是正确的吗

然后我尝试使用:

如果(wifi.getConnectionInfo().getSSID()!=null)

但我注意到它返回一个字符串,即使连接已丢失或已被禁用

那我该怎么办

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);
在启动意图之前,是否有更通用的方法来测试设备是否连接到互联网?无论是通过Wifi、3G等


提前感谢您的帮助。

您可以按以下方式进行:

  @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);

         }  

根据Wifi所处的状态,您将得到0,1,2,3,因此,例如2正在连接,您可以检查文档中的其余部分

尝试
android.net.ConnectivityManager.getActiveNetworkInfo()
:如果它返回
null
,则您没有连接;如果它返回一个
NetworkInfo
对象,您可以使用
NetworkInfo.getState()
检查连接的状态,如果它是
NetworkInfo.state.CONNECTED
则您已连接,否则未连接。

您可以使用以下代码检查连接:

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();
}
请确保您已在清单中注册了android.net.conn.CONNECTIVITY\u更改意图,否则,您将永远不会收到联机通知


在过去的几天里,我一直在努力解决这个问题,我刚刚意识到我需要注册连接更改,而不仅仅是WIFI状态更改。

在您的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\u更改广播意图

<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();
    }

此代码检查您是否使用wifi或3g或其他设备,如果wifi已打开但未连接到网络或3g存在信号问题,则会检测此详细信息,而启用wifi状态仅表示wifi收音机已打开。这与您是否实际连接到接入点没有任何关系。事实上,那么您有什么建议?将此方法命名为
isConnectedViaWiFi
是否更合适/正确?