У меня странная проблема. У меня есть очень простой фрагмент кода, который должен срабатывать всякий раз, когда кто-то подключается к точке доступа Wi-Fi.
IntentFilter ConnectedFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
getApplicationContext().registerReceiver(ConnectedToAPReceiver, ConnectedFilter);
private BroadcastReceiver ConnectedToAPReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
final String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION))
{
ConnectivityManager connManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo Wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (Wifi.isConnected())
{
// If we get here, it means that the user has just connected to wifi.
}
}
}
};
Этот код работает очень хорошо для того, что мне нужно. Однако я получаю странное явление, что при нажатии кнопки «Назад» или «Домой» также срабатывает широковещательный приемник. Кроме того, загрузка приложения также вызывает это.
Кто-нибудь знает, почему нажатие этих кнопок будет рассматриваться Android как изменение подключения? И есть ли у кого-нибудь идеи, как легко отличить эти нажатия кнопок от действительного изменения подключения.
Это часть решения благодаря некоторой работе.
Во-первых, у меня есть два класса: класс активности и класс обслуживания. В моем классе активности я устанавливаю переменную в классе обслуживания, используя широковещательный приемник всякий раз, когда вызываются onPause и onDestroy. (Они срабатывают, когда пользователь нажимает эти кнопки). Получатель в классе обслуживания улавливает это намерение и устанавливает общедоступную переменную.
Затем в классах активности onResume я проверяю эту переменную и отправляю в службу другое намерение, чтобы сбросить переменную в состояние по умолчанию. Здесь я также установил локальный флаг. Когда я выполняю какую-либо обработку, я просто заранее проверяю этот флаг и обрабатываю его соответствующим образом.