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 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 Andrey Efimov и Sashar333 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
Вопрос
Sashar333
Здравствуйте!
Подскажите пожалуйста как делается самая простая проверка подключения телефона на android к интернету, перед выполнением функции IdHTTP1.get ?
Без этого приложение "вылетает".
В программе требует просто пропустить выполнение этой функции, если нет интернета.
Заранее спасибо!
21 ответ на этот вопрос
Рекомендуемые сообщения