android - 监听WIFI状态

标签 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 启用数据包流量

最佳答案

我也遇到了这个问题,下面是我是如何解决的。

在我的 onCreate(..) Activity 中我做了

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 并不意味着它已连接。至少这是我的猜测,这就是我等待网络真正连接的原因。

关于android - 监听WIFI状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434235/

相关文章:

android - 如何在 ListView 中拥有高级列表项

android - 导航组件无法弹出以退出应用程序

Android 手机未检测到在我的笔记本电脑上创建的无线网络

使用背景图片时Android慢速滑动菜单

android - 如何通过WiFi发送数据?

android - SCAN_RESULTS_AVAILABLE_ACTION 在 Android 6.0 中返回空列表

java - 以编程方式打开 wifi 网络共享

android - 我们可以让 wifi direct api 在 2.3 版本中工作吗

android - wpa_supplicant 是针对 android 设备特定的还是特定于 android 版本的?

java - 为什么我不能让这些计算显示在 TextView 上?