2015-12-06 2 views
1

Добрый день, я разрабатываю приложение для Android, где я отправляю E-Mail, когда пользователь нажимает на определенную активность в моем приложении. Я могу правильно отправлять E-Mail, используя AsyncTask. Тем не менее, я хочу убедиться, что пользователь действительно находится в сети, когда это происходит.Android - включение функции обратного вызова WiFi?

Я также знаю, что я могу программно включить Wi-Fi, как, например:

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 уже подключен без использования радиоприемников? Я знаю, что я могу использовать широковещательные приемники, чтобы проверить, подключено ли устройство уже. Однако, я думаю, что это слишком громоздко для моих целей. Я ищу что-то вроде функции обратного вызова, аналогичной тем, которые используются в инфраструктурах ExtJS при синхронизации записей в хранилище/базе данных.

  2. Если в Android нет функции обратного вызова, возможно ли, чтобы широковещательный приемник вызывал функцию вашего приложения только при активном приложении? Я имею в виду, что я хочу, чтобы мой широковещательный приемник вызывал функцию (функция отправки электронной почты) в моей деятельности только тогда, когда мое приложение активно. Я не хочу, чтобы он вызывал эту функцию всякий раз, когда изменяется состояние WiFi.

ответ

0

Есть ли способ для приложения, чтобы знать, если Wi-Fi уже подключен без использования радиоприемников?

Если вы имеете в виду метод, чтобы проверить, если Wi-Fi подключен прямо сейчас или вы не можете использовать это:

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 и unRegisterReceiver методы Activity. Просто зарегистрируйте свой предполагаемый приемник в onCreate и unRegister его в 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); 
} 
Смежные вопросы