Обработка периодической проверки состояния WiFi в приложении - PullRequest
0 голосов
/ 30 мая 2018

Разработка приложений для новичков на Android, и у меня есть сценарий, который я пытаюсь кодировать в Android Studio.

Мое приложение требует, чтобы пользователь был подключен к определенному Wi-Fi.Поэтому я хотел бы периодически проверять состояние Wi-Fi, и если он не подключен / не подключен к неправильному Wi-Fi, я хочу вывести AlertDialog, пока пользователь не подключится к правильному Wi-Fi.

Однако я борюсь с реализацией.До сих пор мой подход заключался в том, чтобы иметь метод checkWifi(), который проверяет, работает ли мы на правильном Wi-Fi, и соответственно устанавливает глобальное логическое значение onCorrectWifi.Этот checkWifi() выполняется периодически, каждые 30 секунд через TimerTask.

В том же TimerTask, что и метод checkWifi(), есть другой метод, называемый handleWifiStatus().Метод handleWifiStatus() смотрит на onCorrectWifi и, если он True, ничего не делает.Если onCorrectWifi равно False, handleWifiStatus() порождает AlertDialog и затем входит в цикл while.Цикл while вызывает checkWifi() несколько раз, пока onCorrectWifi снова не станет True, после чего цикл while завершается, и AlertDialog прекращается, а обычные действия приложения возобновляются.

Я борюсь с реальной реализацией этого.

Я делаю это слишком сложным для себя?Есть ли лучшая / более простая реализация, которая обеспечит полную концепцию «проверьте состояние Wi-Fi, если не так, покажите AlertDialog, пока Wifi снова не станет хорошим»?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

На первый взгляд, ваша методология кажется правильной, поэтому я не совсем уверен, что происходит не так.Тем не менее, Android на самом деле имеет функциональность для уведомления об изменениях состояния сети, чтобы упростить именно этот сценарий.

// Retrieve the ConnectivityManager via the current Context
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

// Create the method to be called when the WiFi network changes
ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) {
        // Check that this Network is the correct one and take
        // action as appropriate
    }
};

// Set the callback to be fired when WiFi status changes
cm.registerNetworkCallback(
     new NetworkRequest.Builder()
     .addTransportType(TRANSPORT_WIFI)
     .build(),
     callback
);
0 голосов
/ 30 мая 2018
  • Я бы использовал BroadcaseReceiver для захвата события изменения соединения Wi-Fi.Таким образом, вам не нужно запускать периодическую проверку.(См .: Как определить, когда WIFI-соединение установлено в Android? )

  • Не уверен, какой тип диалога вы используете, но если вы используетеОбщий диалог, созданный AlertDialog.Builder, вам не нужно запускать цикл while, чтобы продолжать отображать диалог.Просто позвоните по номеру dialog.create().show(), чтобы отобразить его, и отклоните его, только если установлено правильное соединение Wi-Fi.Учитывая сценарий, я выберу ProgressDialog или ProgressBar вместо AlertDialog.

...