Android - 启用WiFi回调功能?

时间:2015-12-06 12:27:07

标签: android android-wifi android-broadcast

美好的一天,我正在开发一个Android应用程序,当用户点击我的应用程序中的某个活动时,我正在发送电子邮件。我可以使用AsyncTask正确发送电子邮件。但是,我希望在发生这种情况时确保用户实际在线。

我也知道我可以通过编程方式将WiFi转为:

WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
boolean wifiEnabled = wifiManager.isWifiEnabled();

if(!wifiEnabled){
    wifiManager.setWifiEnabled(true);
}

//I can then do my async task here

然而,Android连接到网络并建立连接需要时间。因此,当异步任务因设备离线而失败时。

现在,我的问题是:

  1. 有没有办法让应用程序知道WiFi是否已连接而不使用BroadCast Receiver ?我知道我可以使用广播接收器检查设备是否已连接。但是,我认为这对我来说太麻烦了。我正在寻找类似回调函数的东西,类似于在将记录同步到商店/数据库时在ExtJS框架中使用的函数。

  2. 如果Android中没有回调函数,是否可以让广播接收器仅在应用程序处于活动状态时调用应用程序函数?我的意思是,只有当我的应用程序处于活动状态时,我才希望我的广播接收器在我的活动中调用一个功能(电子邮件发送功能)。我不希望它在WiFi状态发生变化时调用该函数。

1 个答案:

答案 0 :(得分:0)

  

应用程序是否有办法在不使用BroadCast接收器的情况下知道WiFi是否已连接?

如果你的意思是检查wifi是否现在连接的方法,你可以使用它:

private boolean isWifiConnected(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    return wifiInfo.isConnectedOrConnecting();

}

但是为了“了解wifi状态的变化”,除了使用广播接收器之外别无选择。

  

是否可以让广播接收器仅在应用程序处于活动状态时调用应用程序功能?

是。您可以使用registerReceiver的{​​{1}}和unRegisterReceiver方法。只需在Activity中注册您的预期接收者,然后在活动的onCreate方法中取消注册。

示例:

onDestroy