Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
#1

Ожидание подключения wifi - Программирование Android

30.03.2013, 13:03. Просмотров 2773. Ответов 16
Метки нет (Все метки)

Включаю wifi и пытаюсь дождаться подключения.
Идея следующая
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
final class ConnectivityReceiver extends BroadcastReceiver
{
    private final int m_ntype;    
    private final CountDownLatch m_receive = new CountDownLatch(1);
 
    ConnectivityReceiver(int type)
    {
        m_ntype = type;
    }
 
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle bundle  = intent.getExtras();
        if (bundle == null)
        {
            Log.e(this.getClass().getName(), "Отсутствуют данные SMS");
            return;
        }            
        NetworkInfo ninfo = bundle.getParcelable(ConnectivityManager.EXTRA_NETWORK_INFO);
        if (ninfo == null)
        {
            Log.e(this.getClass().getName(), "Отсутствуют данные о сети");
            return;            
        }
        if ((ninfo.getType() == m_ntype) && (ninfo.getState() == State.CONNECTED))
        {
            m_receive.countDown();
        }
    }
 
    public boolean waitForConnection() throws InterruptedException
    {
        return m_receive.await(30, TimeUnit.SECONDS);
    }
}
Использую так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    private boolean wifiConnect()
    {
        ConnectivityReceiver receiver = new ConnectivityReceiver(ConnectivityManager.TYPE_WIFI);
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);                    
        m_context.registerReceiver(receiver, filter);
 
        try
        {        
            Log.d(this.getClass().getName(), "Включение wifi");
            if (!m_wmanager.setWifiEnabled(true))
            {
                Log.e(this.getClass().getName(), "Ошибка включения wifi");
                return false;                                    
            }
            if (!receiver.waitForConnection())
            {
                Log.e(this.getClass().getName(), "Не удалось подключиться к сети");
                return false;                                                            
            }
 
            Log.d(this.getClass().getName(), "Подключились к wifi");
            return true;
        }
        catch (Exception ex)
        {
            String error = (ex.getMessage() != null)
                ? ex.getMessage() : "Ошибка включения WiFi";            
            Log.e(this.getClass().getName(), error);
            return false;            
        }
        finally
        {
            m_context.unregisterReceiver(receiver);
        }
    }
Но не всегда удается дождаться.
Складывается впечатление, что BroadcastReceiver приходит в том же потоке.

Как еще можно дождаться ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2013, 13:03     Ожидание подключения wifi
Посмотрите здесь:

Ожидание подключения к серверу (ProgressDialog) - Программирование Android
Здравствуйте! Мне нужно, чтобы при переходе на MainActivity вылазил ProgressDialog (он проверяет есть ли подключение к серверу), если...

Ожидание завершения AsyncTask - Программирование Android
Имеется класс "расширяющий" AsyncTask. Как я понимаю при создании объекта этого класса создается новый поток который выполняется...

Ожидание завершения пула потоков - Программирование Android
Нужно чтоб результат этого кода возвращался по завершению выполнения всех потоков в пуле ExecutorService exService =...

Ожидание ответа от запроса к серверу по сети - Программирование Android
Всего доброго! Использую Volley для получения ответа от сервера, мне нужно чтобы при нажатии на кнопку выполнялся запрос и ответ на...

Определение 3G/4G подключения - Программирование Android
Здравствуйте. Андроид изучаю недавно. И вот пришла идея написать сервис, который будет определять, какое подключение используется...

Проверка подключения по bluetooth - Программирование Android
Не подскажите, как можно проверять активно ли подключение по bluetooth? У меня есть два устройства, связь между ними устанавливается без...

Мониторинг интернет подключения - Программирование Android
Здравствуйте. Столкнулся с такой проблемой: Отслеживаю наличие интернет подключения в сервисе методом @Override public void...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
02.04.2013, 11:54  [ТС]     Ожидание подключения wifi #2
Никто не делал ?
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
03.04.2013, 01:27     Ожидание подключения wifi #3
попробуй receiver.waitForConnection() вынести в отедльный поток или в asyncTask... или вообще без него проверь если броадкаст ловится вообще

Добавлено через 49 секунд
вообще работать с сетью нужно в отдельном потоке....
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
03.04.2013, 14:03  [ТС]     Ожидание подключения wifi #4
Так это все и выполняется в отдельном потоке. Или я чего-то не понял ?
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
04.04.2013, 00:27     Ожидание подключения wifi #5
я тут отдельного потока вроде бы не видел))))
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
04.04.2013, 10:22  [ТС]     Ожидание подключения wifi #6
Цитата Сообщение от lifestyle Посмотреть сообщение
я тут отдельного потока вроде бы не видел))))
Я просто не совсем понимаю как вынести в отдельный поток. Ведь если я его запущу, то мне все-равно придется
ждать его завершения, чтоб понять, что подключение активно.
Выносить логичнее само включение wifi, то есть setWifiEnabled.

Или как-то asyncTask решит эту проблему ?
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
06.04.2013, 01:16     Ожидание подключения wifi #7
Ну а так ты в основном потоке ждешь выполнения функций, и в это время весь твой UI "заморожен" ...
Или я наверное, что то не так понимаю.
Какого функционала ты добиваешься??
вынеси в отдельный поток а лучше через AsyncTask весь метод wifiConnect() да и наверное увеличь тайм аут, иногда подключение занимает приличное время...
метод waitForConnection() заморажевает главный поток на 30 секунд , в это время ничего не может быть выполнен, т.е. заходишь в метод waitForConnection() основной поток засыпает, соответственно ничего не происходит и через 30 секунд метод wificonnect() завершается со значением FALSE и соответственно удаляется ресивер данного бродкаста...
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
06.04.2013, 12:18  [ТС]     Ожидание подключения wifi #8
Понятно. Идею понял.
Только стою перед делемой- создать поток или
использовать AsyncTask. Нужно, чтобы задача
выполнялась регулярно каждые 10-15 мин., но
не в потоке gui, чтоб его не блокировать.

Я просто с AsynkTask не работал.
Подойдет ли он для этого?
И где можно найти примерчик работы с ним?
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
06.04.2013, 14:19     Ожидание подключения wifi #9
xbarmaglot,
AsyncTask - самое то.
И не рекомендую использование таймера для повторных запусков твоего потока подключения.
ИМХО лучшая связка, что тебе сюда подойдет это AsyncTask + Handler:sendEmptyMessageDelayed(int what, long delayMillis).

Официальная документация + примерчики - AsyncTask
Официальная документация по Handler'у
Примерчик + дискуссия по AsyncTask'у
Handler example 1
Handler Structure Simple Example
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
06.04.2013, 14:24  [ТС]     Ожидание подключения wifi #10
lifestyle, я почитал про AsyncTask. Его нельзя повторно запускать.
А как тогда будет работать связка AsyncTask + Handler:sendEmptyMessageDelayed.
Нужно пересоздавать AsyncTask. Почему таймер не подойдет ?
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
06.04.2013, 14:42     Ожидание подключения wifi #11
xbarmaglot, thread тоже повторно запускать нельзя и что?)))
Да создаешь новый Instance вот и все)))
Таймер можно использовать, просто я его не люблю после наследования чужого кода с таймером и отловом багов. у него есть свои приколы. Если будешь его использовать то будь внимателен просто и не пропусти ничего.
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
06.04.2013, 17:04  [ТС]     Ожидание подключения wifi #12
Цитата Сообщение от lifestyle Посмотреть сообщение
xbarmaglot, thread тоже повторно запускать нельзя и что?)))
Да создаешь новый Instance вот и все)))
Таймер можно использовать, просто я его не люблю после наследования чужого кода с таймером и отловом багов. у него есть свои приколы. Если будешь его использовать то будь внимателен просто и не пропусти ничего.
просто поток я могу крутить бесконечно с ожидание нужного таймаута.
Просто никак не пойму принцип работы предложенной тобой связки...

Можно схематично примерчик ?
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
06.04.2013, 20:35     Ожидание подключения wifi #13
из асинк таска есть доступ к UI потоку а хэндлер будет принимать и отправлять сообщения через определенное тобой время
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
06.04.2013, 22:23  [ТС]     Ожидание подключения wifi #14
lifestyle, я в яве без года 2 дня, поэтому мне немного не понятно.
Таймеры к которым я привык можно было запускать с регулярной периодичностью. А тут нужно перезапускать.
Поэтому я не совсем понимаю как это.

Если не сложно - приведи пример...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2013, 00:02     Ожидание подключения wifi
Еще ссылки по теме:

Получить событие подключения к интернету - Программирование Android
Почитал в недавнем посте как проверить подключение к интернету. Все хорошо, но более интересно как отловить, что доступ к интернету...

Ошибка подключения через ssl - Программирование Android
Surespot клиент работает без ssl, но не работает с ним. Логи клиента в аттаче. Логи сервера пусты, видимо клиент даже не может подключится.

Верстка, без подключения API - Программирование Android
Всем привет! Столкнулся с одной проблемой, нужно накидать верстку, с несколькими Activity, по сути на них отображается только...

Обработка ошибки подключения по Bluetooth - Basic4Android
Добрый день! У меня в программе, написанной на Basic4Android реализована связь телефона с контроллером по Bluetooth. При запуске...

WiFi и энергосбережение - Программирование Android
Написал программу что-то вроде сетевого монитора, но есть одна проблема, которую нужно решить. Программа не использует WifiManager, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
08.04.2013, 00:02     Ожидание подключения wifi #15
Пример чего?!
перезапуск потока:
Java
1
2
3
4
5
6
private MyThread mThread = null;
 
public void startThread() {
    mThread = new MyThread();
    mThread.start();
}
Yandex
Объявления
08.04.2013, 00:02     Ожидание подключения wifi
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru