首页 文章

ANDROID:如果WiFi已启用且处于活动状态,则启动意图

提问于
浏览
15

这就是我想做的事情:

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

=>如果不是,那么我会启动另一个意图,这样我就不会显示WebView“网页不可用...... http://www.mywebsite.com的网页可能暂时关闭或者它可能已经移动......”

我最初打算使用

如果(wifi.isWifiEnabled())

但这并没有说明Wifi连接是否为ACTIVE . 它只表示用户已打开开关 . 设备可能连接也可能没有连接......这是正确的吗?

然后我试着用:

if(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等...

在此先感谢您的帮助 .

5 回答

  • 0

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

  • 2

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

    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 .

  • 5

    你可以这样做:

    @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连接,您可以检查文档中的其余部分

  • 20

    在您的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>
    
  • 8

    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有信号问题它检测到这个细节, DetailedStates

相关问题