听WIFI状态

时间:2012-02-24 16:21:19

标签: android android-wifi android-wireless android-event

我想设置监听器来监听无线状态,任何人都可以帮助我使用我的代码

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

...

 TelephonyManager wTelephonyManager;

...

     wTelephonyManager=(TelephonyManager)getSystemService(Context.WIFI_SERVICE);
    wTelephonyManager.listen(new PhoneL(),PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
    connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

//这是我使用的事件,我想收听wifi更改,上面的代码全部在onCreate {}

class PhoneL extends PhoneStateListener

{   






    public void onWifiStateChanged(int state, String nesto)
    {
         mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            //mWifi.isConnectedOrConnecting()
             if(mWifi.isConnectedOrConnecting())
             {
                 Toast.makeText(WifiActivity.this,"Ima WIFI",Toast.LENGTH_LONG).show();     
             }
             else
             {
                 Toast.makeText(WifiActivity.this,"! NEMA WIFI",Toast.LENGTH_LONG).show(); 
             }


    }

}

//任何人都可以帮我创建一个监听器,它将监听wifi状态并检查wifi是否已连接或连接,如果不是我想通过3g / 4g启用数据包流量

3 个答案:

答案 0 :(得分:6)

我也遇到过这个问题,这就是我解决问题的方法。

在我的活动onCreate(..)中我做了

this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));

另外我用这种方式创建了成员'mWifiStateChangedReceiver

private BroadcastReceiver mWifiStateChangedReceiver = new BroadcastReceiver()
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        // TODO Auto-generated method stub

        int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);

        switch (extraWifiState)
        {
        case WifiManager.WIFI_STATE_DISABLED:
        case WifiManager.WIFI_STATE_DISABLING:
            enableUI(false);
            break;
        case WifiManager.WIFI_STATE_ENABLED:
            ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
            while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED)
            {
                try
                {
                    Thread.sleep(500);
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            update();
            enableUI(true);
            break;
        case WifiManager.WIFI_STATE_ENABLING:
            break;
        case WifiManager.WIFI_STATE_UNKNOWN:
            break;
        }

    }
};

正如您所看到的,当我得到WifiManager.WIFI_STATE_ENABLED时,我还会测试网络是否真正连接,因为启用的WiFi并不意味着它已连接。至少这是我的猜测,这就是我等到网络真正连接的原因。

答案 1 :(得分:1)

如果你想听信号强度,你也可以听:

WifiManager.RSSI_CHANGED_ACTION

答案 2 :(得分:-2)

Data Traffic未连接但是存在问题时,Android系统会要求切换到WiFi
如果在屏幕关闭时关闭WiFi,它将在WiFi和3G网络之间不断变化,如果您选择了应用程序在后台发送数据,如果您没有无限制的数据计划,它将使用更昂贵的数据连接。
另一个问题是,当您处于WiFi信号不太强的区域时,它将不断变为数据流量,您将遇到浏览或其他问题。
第三个问题是电池,因为从我听说使用WiFi连接比使用数据更好(电池方面),一个附加组件在屏幕关闭时不关闭WiFi。(甚至,我这样做)因为关闭和使用WiFi是最昂贵的(电池)始终开启。因此,将它留给Android系统。