У меня странная проблема.У меня есть очень простой кусок кода, который предназначен для запуска всякий раз, когда кто-то подключается к точке доступа 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 я проверяю эту переменную и отправляю еще одно намерение службе, чтобы сбросить переменную в ее состояние по умолчанию.Здесь я также установил местный флаг.Когда я выполняю какую-либо обработку, я просто заранее проверяю этот флаг и обрабатываю его соответствующим образом.