0

我正在编写一个连接到特定 WIFI 网络的 android 应用程序。棘手的部分是,当用户手动连接到其他网络时,或者关闭 WIFI,或者连接丢失(因为用户走开)......我需要忘记这个网络(removeNetwork)。

我的问题如下:我该怎么做才能做到这一点?

  • 我是否需要创建一个在后台运行的服务,每 5 分钟检查一次 WIFI 的状态?
  • 当WIFI改变某些特定状态时,是否有任何“挂钩”方法来运行类、方法、函数?
  • 解决此问题的最佳方法是什么?

真的感谢!

4

2 回答 2

2

我建议您在您的应用程序中实现一个广播接收器,只要网络或 wifi 连接有任何变化就可以激活,并且在该广播接收器的 onRecieve() 方法中,您可以在连接丢失时进行任何类型的处理.

这在你的清单中

<receiver android:name=".WifiReceiver" >
    <intent-filter>
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver> 

这是java代码。公共类 WifiReceiver 扩展 BroadcastReceiver { private final String TAG = "WifiReceiver";

@Override
public void onReceive(Context context, Intent intent) {
    int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
    String wifiStateText = "No State";

    switch (wifiState) {
    case WifiManager.WIFI_STATE_DISABLING:
        wifiStateText = "WIFI_STATE_DISABLING";
        break;
    case WifiManager.WIFI_STATE_DISABLED:
        wifiStateText = "WIFI_STATE_DISABLED";
        break;
    case WifiManager.WIFI_STATE_ENABLING:
        wifiStateText = "WIFI_STATE_ENABLING";
        break;
    case WifiManager.WIFI_STATE_ENABLED:
        wifiStateText = "WIFI_STATE_ENABLED";
        break;
    case WifiManager.WIFI_STATE_UNKNOWN:
        wifiStateText = "WIFI_STATE_UNKNOWN";
        break;
    default:
        break;
    }
    MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText);
    MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date());
}

并且不要忘记添加以下权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-03-09T16:39:20.027 回答
1

请查看以下有关创建将在网络状态更改时调用的 BroadcastReriever 的帖子:

互联网监听器 Android 示例

网络监听器 Android

于 2013-03-09T16:36:56.960 回答