在Android中启用WiFi回调功能

问题描述 投票:1回答:1

我正在开发一个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接收器?我知道我可以使用广播接收器检查设备是否已连接。但是,我认为这对我来说太麻烦了。我正在寻找类似回调函数的东西,类似于将记录同步到商店/数据库时在ExtJS框架中使用的那些东西。

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

android android-wifi android-broadcast
1个回答
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状态,只能使用广播接收器。

仅当应用程序处于活动状态时,才可以让广播接收器调用您的应用程序功能吗?

是。您可以使用registerReceiverunRegisterReceiverActivity方法。只需在onCreate中注册您想要的接收者,然后在您的活动的onDestroy方法中取消注册。

示例:

public class MainActivity extends Activity {

BroadcastReceiver receiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(MainActivity.this, "Wifi State Changed!", Toast.LENGTH_SHORT).show();
        }
    };
    registerReceiver(receiver, new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION));

}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(receiver);
}
© www.soinside.com 2019 - 2024. All rights reserved.