【问题标题】:Listening WIFI state监听WIFI状态
【发布时间】:2012-03-15 02:36:46
【问题描述】:

我想设置监听器来监听无线状态,谁能帮我写代码

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

【问题讨论】:

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


【解决方案1】:

如果您想收听信号强度,您也可以在以下位置收听:

WifiManager.RSSI_CHANGED_ACTION

【讨论】:

    【解决方案2】:

    当WiFi未连接但出现问题时,android系统要求切换到Data Traffic。
    如果在屏幕关闭时关闭WiFi,它会在WiFi和3G网络之间不断切换,如果您选择了后台发送数据的应用程序,它将使用数据连接,如果您没有无限数据计划,则成本更高.
    另一个问题是,当您处于 WiFi 信号不那么强的区域时,它会不断更改为数据流量,并且您会遇到浏览问题或其他问题。
    第三个问题是电池,据我所知,使用 WiFi 连接比使用数据更好(电池方面),当屏幕关闭时,一个插件不会关闭 WiFi。(甚至,我这样做)因为将其关闭并打开 WiFi 是最昂贵的(电池),并且始终处于开启状态。所以因此将其留给android系统。

    【讨论】:

      【解决方案3】:

      我也遇到过这个问题,我是这样解决的。

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

      【讨论】:

      • 在启用 WIFI 但未连接的情况下,不会让 while 循环使应用程序失效。你应该给它添加一个超时时间,比如在 10 个循环之后。
      • CountDownLatch 会为您提供一种等待超时事件的好方法。
      • 对不起@Chris,...但是您在注册侦听器时放置了这个新的 IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)) 。但是在 Broadcastlistener 里面你放了不同的值:intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);对吗?
      • 我遇到了安全异常。说“java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.net.conn.CONNECTIVITY_CHANGE”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多