Android 监听WIFI状态

Android 监听WIFI状态,android,android-wifi,android-wireless,android-event,Android,Android Wifi,Android Wireless,Android Event,我想将侦听器设置为在无线状态下侦听,有人能帮我编写代码吗 import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; //下面是我想要监听wifi更改的事件,上面的代码都在onCreate{} class PhoneL extends PhoneStateListener { public void onWifiStateChanged(int s

我想将侦听器设置为在无线状态下侦听,有人能帮我编写代码吗

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

//下面是我想要监听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启用数据包流量我也遇到了这个问题,下面是我解决问题的方法

在我的活动onCreate(…)中,我做到了

此外,我还以这种方式创建了成员“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\u STATE\u时,我会另外测试网络是否真正连接,因为启用WIFI并不意味着它已连接。至少这是我的猜测,这就是我等待网络真正连接的原因。

WiFi
未连接但出现问题时,android系统要求切换到
数据流量。
如果您在屏幕关闭时关闭WiFi,它将在WiFi和3G网络之间不断变化,如果您选择了在后台发送数据的应用程序,它将使用数据连接,如果您没有无限制的数据计划,则成本会更高。
另一个问题是,当你在一个无线信号不太强的地区时,它会不断地转变为数据流量,你会在浏览或其他方面遇到问题。

第三个问题是电池,据我所知,使用WiFi连接比使用数据更好(电池方面),有一个附加功能,在屏幕关闭时不要关闭WiFi。(即使如此,我也会这样做),因为关闭WiFi和打开WiFi都是最昂贵的(电池),永远打开。因此,将其留给android系统

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


WifiManager.RSSI\u已更改\u操作

查看[此线程][1]。[1] :在启用WIFI但未连接的情况下,while循环是否会使应用程序正常运行。你应该给它加上一个超时,比如说在10次循环之后。倒计时闩锁会给你一个很好的方式来等待一个超时的事件。抱歉@Chris。。。但是,当您注册侦听器时,您放置了这个新的IntentFilter(WifiManager.WIFI\u STATE\u CHANGED\u ACTION))。但是在Broadcastlistener中,您放置了不同的值:intent.getIntExtra(WifiManager.EXTRA\u WIFI\u STATE,WifiManager.WIFI\u STATE\u UNKNOWN);对吗?我遇到了安全异常。表示“java.lang.SecurityException:权限拒绝:不允许发送广播android.net.conn.CONNECTIVITY\u更改”
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(); 
             }


    }

}
this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
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;
        }

    }
};