Sashar333 Опубликовано 18 мая, 2017 Поделиться Опубликовано 18 мая, 2017 Здравствуйте! Подскажите пожалуйста как делается самая простая проверка подключения телефона на android к интернету, перед выполнением функции IdHTTP1.get ? Без этого приложение "вылетает". В программе требует просто пропустить выполнение этой функции, если нет интернета. Заранее спасибо! Ссылка на комментарий
0 Dogos Опубликовано 18 мая, 2017 Поделиться Опубликовано 18 мая, 2017 http://delphifmandroid.blogspot.ru/2013/12/delphi-xe5.html Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 18 мая, 2017 Модераторы Поделиться Опубликовано 18 мая, 2017 https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo Ссылка на комментарий
0 ENERGY Опубликовано 18 мая, 2017 Поделиться Опубликовано 18 мая, 2017 На эту тему топиков уже пачка открыта. Ссылка на комментарий
0 DMS Опубликовано 18 мая, 2017 Поделиться Опубликовано 18 мая, 2017 9 часов назад, Sashar333 сказал: Здравствуйте! Подскажите пожалуйста как делается самая простая проверка подключения телефона на android к интернету, перед выполнением функции IdHTTP1.get ? Без этого приложение "вылетает". В программе требует просто пропустить выполнение этой функции, если нет интернета. Заранее спасибо! Не должно вылетать, даже если Инета нет Ссылка на комментарий
0 Sashar333 Опубликовано 18 мая, 2017 Автор Поделиться Опубликовано 18 мая, 2017 Спасибо. Но этим методом у меня не получается. Delphi ругается на множество операторов. Ссылка на комментарий
0 Vitaldj Опубликовано 19 мая, 2017 Поделиться Опубликовано 19 мая, 2017 6 часов назад, Sashar333 сказал: Спасибо. Но этим методом у меня не получается. Delphi ругается на множество операторов. каким именно методом? Здесь не Ванг. Уточняйте! И под андроид не рекомендуется использовать indy! Пользуйтесь netHttp Andrey Efimov 1 Ссылка на комментарий
0 Sashar333 Опубликовано 19 мая, 2017 Автор Поделиться Опубликовано 19 мая, 2017 Вот этот метод : http://delphifmandroid.blogspot.ru/2013/12/delphi-xe5.html сложный для меня. А по поводу этого: https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo выдает ошибку: [DCC Error] ActiveNetworkInfo.Android.pas(52): E2003 Undeclared identifier: 'TAndroidHelper' Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 19 мая, 2017 Модераторы Поделиться Опубликовано 19 мая, 2017 В след. раз сообщайте версию IDE и уровень ваших навыков программирования. Второй вариант подходит для IDE Berlin/Tokyo (10.1.*/10.2.* соответственно), там внутри файла об этом написано... Вы используете XE8, скорее всего подойдёт 1 вариант, но опять же может потребоваться переименовать какой-то модуль или ещё что-то. Подключается он так же, кидаете файлы в папку с проектом и прописываете в uses. А вообще, рекомендую перейти на "Delphi Berlin 10.1 Update 2" - наиболее стабильная версия IDE (начиная с версии XE5). Sashar333 1 Ссылка на комментарий
0 krapotkin Опубликовано 19 мая, 2017 Поделиться Опубликовано 19 мая, 2017 а вообще нужно обрабатывать ошибки, чтобы из за одной ошибки не вылетало всё приложение заодно по ошибке и узнаете, что связи нет Ссылка на комментарий
0 Sashar333 Опубликовано 19 мая, 2017 Автор Поделиться Опубликовано 19 мая, 2017 1 час назад, Andrey Efimov сказал: В след. раз сообщайте версию IDE и уровень ваших навыков программирования. Второй вариант подходит для IDE Berlin/Tokyo (10.1.*/10.2.* соответственно), там внутри файла об этом написано... Вы используете XE8, скорее всего подойдёт 1 вариант, но опять же может потребоваться переименовать какой-то модуль или ещё что-то. Подключается он так же, кидаете файлы в папку с проектом и прописываете в uses. А вообще, рекомендую перейти на "Delphi Berlin 10.1 Update 2" - наиболее стабильная версия IDE (начиная с версии XE5). Спасибо, перехожу... Ссылка на комментарий
0 Sashar333 Опубликовано 19 мая, 2017 Автор Поделиться Опубликовано 19 мая, 2017 2 часа назад, Sashar333 сказал: Спасибо, перехожу... ... Перешел на "Delphi Berlin 10.1 Update 2" но видимо со вторым вариантом тоже у меня не получится... ... Добавил все PASы в папку для всех USESов которые требовал "Delphi Berlin 10.1 Update 2" теперь пишет ошибку: может кто еще подскажет или покажет простейшую проверку подключения к интернету на Android(желательно чтобы работало под все платформы) Ссылка на комментарий
0 AliZairov Опубликовано 19 мая, 2017 Поделиться Опубликовано 19 мая, 2017 Привет. Я использую самый так. Более стабильная. function checkNetwork: Boolean; var TCP: TIdTCPClient; begin Application.ProcessMessages; TCP := TIdTCPClient.Create(nil); try TCP.ReadTimeout := 2000; TCP.ConnectTimeout := 2000; TCP.Port := 80; TCP.Host := 'google.com'; TCP.Connect; TCP.Disconnect; Result := True; except Result := False; TCP.Free; end; end; Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 19 мая, 2017 Модераторы Поделиться Опубликовано 19 мая, 2017 Ну, не знаю где вы накосячили, но я сегодня как раз добавлял свой класс в проект и всё отлично работает... В 19.05.2017 в 16:22, Sashar333 сказал: ... Добавил все PASы в папку для всех USESов которые требовал "Delphi Berlin 10.1 Update 2" Что значит все Pasы? Если второй вариант у вас, это https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo, то нужно: положить файл ActiveNetworkInfo.Android.pas в папку вашего проекта подключить этот файл в Uses вашего проекта Добавить разрешение в Uses Permissions: ACCESS_NETWORK_STATE использовать в коде проекта - TActiveNetworkInfo.метод (например, TActiveNetworkInfo.IsConnected) p.s. Использую Delphi Berlin 10.1 Update 2 Dev 1 Ссылка на комментарий
0 Sashar333 Опубликовано 19 мая, 2017 Автор Поделиться Опубликовано 19 мая, 2017 25 минут назад, Andrey Efimov сказал: Ну, не знаю где вы накосячили, но я сегодня как раз добавлял свой класс в проект и всё отлично работает... Что значит все Pasы? Если второй вариант у вас, это https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo, то нужно: положить файл ActiveNetworkInfo.Android.pas в папку вашего проекта подключить этот файл в Uses вашего проекта использовать в коде проекта - TActiveNetworkInfo.метод (например, TActiveNetworkInfo.IsConnected) p.s. Использую Delphi Berlin 10.1 Update 2 После "положить файл ActiveNetworkInfo.Android.pas в папку вашего проекта" и подключение в Uses начинает ругаться на нехват Androiapi. и Posix. , наверно не настроен Delphi?, по этому все эти PASы добавил в папку. Далее начинает ругаться на Posix.StdDef.size_t; и Psize_t = Posix.StdDef.Psize_t; Ссылка на комментарий
0 ENERGY Опубликовано 19 мая, 2017 Поделиться Опубликовано 19 мая, 2017 (изменено) 1 час назад, Sashar333 сказал: ... Перешел на "Delphi Berlin 10.1 Update 2" но видимо со вторым вариантом тоже у меня не получится... ... Добавил все PASы в папку для всех USESов которые требовал "Delphi Berlin 10.1 Update 2" теперь пишет ошибку: В правой панели выберите платформу Android, а не Windows. Изменено 19 мая, 2017 пользователем ENERGY Sashar333 и Andrey Efimov 2 Ссылка на комментарий
0 Sashar333 Опубликовано 19 мая, 2017 Автор Поделиться Опубликовано 19 мая, 2017 9 минут назад, ENERGY сказал: В правой панели выберите платформу Android, а не Windows. Спасибо заработало! Я почему то решил что это и под WINDOWS тоже сработает, но видимо нет. Правда пришлось еще файлы кое какие добавлять в папку проекта Может заодно подскажете: 1) где в настройках DELPHI прописать пути для проекта к файлам, допустим которые находятся здесь: C:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl Чтобы не копировать их в папку проекта 2) apk файл после выполнения компиляции второго варианта ( https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo ) занимает более 7мб это нормально? Ссылка на комментарий
0 Sashar333 Опубликовано 19 мая, 2017 Автор Поделиться Опубликовано 19 мая, 2017 1 час назад, AliZairov сказал: Привет. Я использую самый так. Более стабильная. function checkNetwork: Boolean; var TCP: TIdTCPClient; begin Application.ProcessMessages; TCP := TIdTCPClient.Create(nil); try TCP.ReadTimeout := 2000; TCP.ConnectTimeout := 2000; TCP.Port := 80; TCP.Host := 'google.com'; TCP.Connect; TCP.Disconnect; Result := True; except Result := False; TCP.Free; end; end; Этот вариант у меня почему то работает только в WINDOWS, на смартфоне приложение вылетает Ссылка на комментарий
0 AliZairov Опубликовано 19 мая, 2017 Поделиться Опубликовано 19 мая, 2017 52 минуты назад, Sashar333 сказал: Этот вариант у меня почему то работает только в WINDOWS, на смартфоне приложение вылетает Да, я использую его для win и mac. Я использую его для Android. function checkNetwork: Boolean; function GetConnectivityManager: JConnectivityManager; var ConnectivityServiceNative: JObject; begin ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); if not Assigned(ConnectivityServiceNative) then raise Exception.Create('Could not locate Connectivity Service'); Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); if not Assigned(Result) then raise Exception.Create('Could not access Connectivity Manager'); end; var cm: JConnectivityManager; activeNetwork: JNetworkInfo; begin cm := GetConnectivityManager; activeNetwork := cm.getActiveNetworkInfo; Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; end; Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 19 мая, 2017 Модераторы Поделиться Опубликовано 19 мая, 2017 6 часов назад, Sashar333 сказал: Может заодно подскажете: 1) где в настройках DELPHI прописать пути для проекта к файлам, допустим которые находятся здесь: C:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl Чтобы не копировать их в папку проекта 2) apk файл после выполнения компиляции второго варианта ( https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo ) занимает более 7мб это нормально? На форуме есть правило: Один вопрос - одна тема. По первому вопросу создайте отдельно тему, а по второму - уже обсуждалось, воспользуйтесь поиском (Поиск: "Размер приложения") Ссылка на комментарий
0 ENERGY Опубликовано 19 мая, 2017 Поделиться Опубликовано 19 мая, 2017 (изменено) Цитата 1) где в настройках DELPHI прописать пути для проекта к файлам, допустим которые находятся здесь: Эти файлы автоматом подхватываются, в зависимости от выбранной платформы, к зтой папке не надо ничего прописывать и не нужно их копировать в папку с проектом. По поводу второго вопроса ссылку вам уже дали. А поводу универсального варианта, для всех платформ, аналогичный варианту, который предложил @AliZairov, блин ну вы бы хоть зашли в указанный мною выше топик. uses System.Net.HttpClient function CheckInternet: boolean; begin Result := false; with THTTPClient.Create do try try Result := Head('http://google.com').StatusCode < 400; except end; finally Free; end; end; Но этот метод работает в несколько раз медленнее, чем вариант для андроида (~200-500 ms, Android метод около 30-50 ms.) Да кстати AliZairov в вашем примере утечка памяти (memory leak) - класс уничтожается только в except блоке. Изменено 19 мая, 2017 пользователем ENERGY Ссылка на комментарий
0 Sashar333 Опубликовано 19 мая, 2017 Автор Поделиться Опубликовано 19 мая, 2017 Все понятно, всем спасибо! Ссылка на комментарий
Вопрос
Sashar333
Здравствуйте!
Подскажите пожалуйста как делается самая простая проверка подключения телефона на android к интернету, перед выполнением функции IdHTTP1.get ?
Без этого приложение "вылетает".
В программе требует просто пропустить выполнение этой функции, если нет интернета.
Заранее спасибо!
Ссылка на комментарий
21 ответ на этот вопрос
Рекомендуемые сообщения