【问题标题】:How to get notified when the users Wifi changes from one network to other当用户 Wifi 从一个网络更改为另一个网络时如何获得通知
【发布时间】:2014-02-26 04:46:37
【问题描述】:

我有一个应用程序,我需要在其中检测用户的 Wifi 连接,并基于此,用户可以看到一些数据。关键是当用户在启动应用程序时在其他网络上并在应用程序运行时移动到其他网络时,我想得到通知。让我做一个场景:

假设我有 2 个 wifi,一个在家里,另一个在外面。启动应用程序时,我在屋内,因此显示给我的数据是“ABC”。现在,当我搬到屋外时,我的应用程序应该发出通知并终止活动,因此当我在屋外时,我应该无法看到相同的数据“ABC”。

【问题讨论】:

标签: java android wifi


【解决方案1】:
  • 如下写一个BroadcastReceiver

    public class TheBroadcastReceiver extends BroadcastReceiver 
    {
        @Override
        public void onReceive(Context context, Intent intent) 
        {
            WifiManager wifiManager = (WifiManager) context
                    .getSystemService(Context.WIFI_SERVICE);
            NetworkInfo datainfo = intent
                    .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (datainfo != null) 
            {
                if (datainfo.getType() == ConnectivityManager.TYPE_WIFI) 
                {
                    //have different network states here
                    if (datainfo.getState() == datainfo.State.CONNECTING || datainfo.getState() == datainfo.State.CONNECTED) {
                        //work accordingly
                    }
                }
            }
        }
    }
    
  • 注册一个 BroadcastReceiver 并在清单中注册这些条目

        <receiver android:name="yours package details like com.a.b.c.TheBroadcastReceiver " >
              <intent-filter>
                   <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
                   <action android:name="android.net.wifi.STATE_CHANGE" />
               </intent-filter>
       </receiver>
    
  • 在清单中添加以下权限集

      <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
      <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    
  • 另请访问http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

【讨论】:

  • 嗨,Jitesh,感谢您的帮助,但您能告诉我在哪里会收到有关 Wifi 已更改的通知。我的意思是假设我在名为“Inside”的 wifi 上,然后我移动到“Outside”,你能告诉我在哪里编写代码来发送一条消息,例如“Wifi 已从“Inside”更改为“Outside”。
  • 嗨,我在给定的代码上写了一条评论,因为 //work
  • “//这里有不同的网络状态”的部分是什么?是什么网络状态?
  • 如您所见,在它之后有一个 if 检查,在检查 wifi 状态 ConnectivityManager.TYPE_WIFI 后它在旁边!!
  • 基本上你在评论后得到不同的网络状态,请看代码
【解决方案2】:

每次用户更改您可以在 BroadcastReceiver 中捕获的连接时。

  • 首先你需要在AndroidManifest.xml中声明以下权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    
  • 创建一个广播接收器

    public class BrodcastNetwork extends BroadcastReceiver 
    {
          @Override
          public void onReceive(Context context, Intent intent) 
          {
                  // Write your code here
          }
    }
    
  • 将过滤器应用于广播接收器

      <receiver android:name="com.example.datausage.BrodcastNetwork" >
          <intent-filter>
              <action android:name="android.net.conn.CONNECTIVITY_CHANGE" >
              </action>
          </intent-filter>
      </receiver>
    

【讨论】:

    【解决方案3】:
    1. 注册广播接收器以侦听操作“android.net.ConnectivityManager.CONNECTIVITY_ACTION”
    2. 当连接变为“已连接”状态时,调用 WifiManager.getConnectionInfo().getBSSID() 查看当前接入点 ID

    【讨论】:

      猜你喜欢
      • 2013-01-30
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 2013-10-20
      • 2014-04-19
      • 2012-05-18
      相关资源
      最近更新 更多