如何在用户Wifi从一个网络更改为其他网络时收到通知

时间:2014-02-26 04:46:38

标签: java android wifi

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

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

3 个答案:

答案 0 :(得分:1)

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

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

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    
  • 创建BroadcastReceiver

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

  1. 注册广播接收器以侦听动作“android.net.ConnectivityManager.CONNECTIVITY_ACTION”
  2. 当连接更改为“已连接”状态时,请调用WifiManager.getConnectionInfo()。getBSSID()以检查当前的访问点ID