Вопрос

Delphi XE8, Android.

 

Не могу перехватить исключение при попытке активировать TTetheringManager, при отладке появляется EIdSocketError "Socket Error #101 Network is unreachable". Если игнорировать или запускать приложение отдельно - глухой висяк. Код простой:

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    TM.Enabled:=True;
  except
    on E : EIdSocketError do
      ShowMessage(E.Message) ;
  end;
  if TM.Enabled then
    TAP.Enabled:=True;
end;

Исключение не перехватывается. Возникает судя по всему уже в отдельном потоке и приводит к неработоспособности приложения при попытке запустить с выключенным wifi или интернетом.

Конечно можно обвесить каждое телодвижение внешними проверками на наличие связи, но подозреваю есть путь проще. Буду благодарен за помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

6 ответов на этот вопрос

  • 0
  if TM.Enabled then
    TAP.Enabled:=True;

что он должен делать? что за компоненты?

Изменено пользователем ZuBy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
  if TM.Enabled then
    TAP.Enabled:=True;

что он должен делать? что за компоненты?

 

Название темы это объясняет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

  if TM.Enabled then
    TAP.Enabled:=True;

что он должен делать? что за компоненты?

 

Название темы это объясняет.

TM - TTetheringManager

TAP - ???

ну в принципе, если вам не нужно, то и другим тоже

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вот полный код приложения:

unit Unit1;

interface
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,System.Tether.Manager,
  System.Tether.AppProfile, IPPeerClient, IPPeerServer,
  FMX.Controls.Presentation, FMX.StdCtrls, IdStack;
type
  TForm1 = class(TForm)
    TM: TTetheringManager;
    TAP: TTetheringAppProfile;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var Form1: TForm1;

implementation
{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    TM.Enabled:=True;
  except
    on E : EIdSocketError do
      ShowMessage(E.Message) ;
  end;
  if TM.Enabled then
    TAP.Enabled:=True;
end;

end.

Пробовал перехватывать с помощью Application.OnException, но тоже безрезультатно. Судя по исходникам, авторы компонентов не посчитали нужным обрабатывать сетевые ошибки Добавил свои проверки на доступность Wi-Fi и мобильного интернета...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Обнаружил еще одну странность TTetheringManager - не хочет работать через мобильный интернет. 

procedure TForm1.Button2Click(Sender: TObject);
Var DiscoverTimeOut : Integer;
    ATargetList: TTetheringTargetHosts;
begin
  SetLength(ATargetList,3);
  ATargetList[0]:='195.22.104.70';
  ATargetList[1]:='195.22.104.71';
  ATargetList[2]:='195.22.104.72';
  DiscoverTimeOut:=5000;
  TM.DiscoverManagers(10000,ATargetList);
end;

Этот код не имеет никакого эффекта. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Обнаружил еще одну странность TTetheringManager - не хочет работать через мобильный интернет. 

procedure TForm1.Button2Click(Sender: TObject);
Var DiscoverTimeOut : Integer;
    ATargetList: TTetheringTargetHosts;
begin
  SetLength(ATargetList,3);
  ATargetList[0]:='195.22.104.70';
  ATargetList[1]:='195.22.104.71';
  ATargetList[2]:='195.22.104.72';
  DiscoverTimeOut:=5000;
  TM.DiscoverManagers(10000,ATargetList);
end;

Этот код не имеет никакого эффекта. 

так и не будет иметь! через мобильный интернет Tethering не работает в принципе!

Andrey Efimov понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: Rusland
      Приложение свернуто или закрыто.
      Отправляю один пуш, на телефоне в шторке появляется уведомление.
      Отправляю еще один, появляется второе уведомление и так далее. Сколько пушей, столько и уведомлений.
      Как сделать чтобы все уведомления собирались в одном уведомлении в шторке? (как делают telegram, whatsapp и т. п.)
    • Автор: Astghik
      How to print text from Android (IOS) device ? (C++ Rad Studio 10.2)
      With USB printer and other types printers (WiFi, Bluetooth ....)
    • Автор: Rionn
      В этой ссылке показан пример работы в одной сети (написано курсивом). Не могу найти, чтобы PC работал по сети или по WiFi, а телефон по мобильным данным. Не подскажете?
    • Автор: Евгений Корепов
      Наткнулся тут на изящную штуку для приложения с PUSH уведомлениями на Android и Ios. Один объект, все сам делает.
      Внедрил в одно боевое приложение с 100+ тысячами установок, полет нормальный.
      Описание тут https://delphiworlds.com/2017/04/firebase-cloud-messaging-android-ios/
      Исходный код с примером на гитхабе https://github.com/DelphiWorlds/PushClient
      Использование максимально простое:
      uses DW.PushClient; .... private FPushClient: TPushClient; procedure PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); procedure PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); .... procedure TFormMain.InitPushService; begin FPushClient := TPushClient.Create; FPushClient.GCMAppID := ConstGCMAppID; FPushClient.ServerKey := ''; FPushClient.BundleID := ''; FPushClient.UseSandbox := Debug; // Change this to False for production use! FPushClient.OnChange := PushClientChangeHandler; FPushClient.OnReceiveNotification := PushClientReceiveNotificationHandler; try FPushClient.Active := True; except SendError('FPushClient.Active Exception'); end; end; procedure TFormMain.PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); begin if TPushService.TChange.DeviceToken in AChange then begin HDevicePushParams.DeviceID:=FPushClient.DeviceID; HDevicePushParams.DeviceToken:=FPushClient.DeviceToken; GetHTTP(CommandRegisterFCM); // Memo1.Lines.Add('DeviceID = ' + FPushClient.DeviceID); // Memo1.Lines.Add('DeviceToken = ' + FPushClient.DeviceToken); end; end; procedure TFormMain.PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); begin // ShowMessage(ANotification.DataObject.ToString... end; Правда руки не дошли разобраться для чего ему 
        FPushClient.ServerKey := '';
        FPushClient.BundleID := '';
      Но и без этого работает.
       
    • Автор: Golovanyuk
      Здравствуйте!
      У меня проблемы при создании Android программ.
      Когда компилирую проект и запускаю его из среды Delphi сразу на мобильник, то первый раз программа еще работает, а во второй-третий раз на мобильнике показывается только заставка с огнем, а потом черный экран, а в самой среде в самом низу (где Event log и где обычно показываются процессы) - ничего нет, пусто.
      Потом приходится перезапускать Delphi.
      У меня есть подозрения, что я неправильно настроил Delphi.
      Не могли бы гуру взглянуть на мои настройки и указать на мои ошибки?
      Скриншоты приложил, спасибо.
      P,S, Delphi 10.1



    • Автор: delphiex
      Всем доброго дня. Прошу помочь, любая малейшая подсказка прояснит ситуацию. Сделал русскоязычное Андроид приложение на Delphi XE8.  Использовал SQlite в своем проекте. Работает отлично, оттестировал на Android 6.0 и  Android 4.5 на двух разных аппаратах. Прежде чем делать мультиязычное приложение, решил проверить как оно будет работать, если язык системы будет отличным от русского. Поставил английский-United Kingdom и приложение не запустилось, вернее пошла заставка, после нее  приложение просто закрылось без ошибок. То же самое при французском, испанском системных языках. А вот при немецком и украинском языке системы - работает. В чем здесь дело никак не могу понять и куда копать. Приложение не могу предоставить - слишком большое.
    • Автор: Алмаз Амангельды
      Multi device application 
      Работаю  с WebBrowser и появляется такая проблема что компонент дублируется появляется тоненькая полоска (пикселей 10 или 5 ) которая работает отдельно (т.е можно скролить страницу в разные направления ,  поэтому складывается впечатление что данный компонент Дублируется )
      Вверху tabcontrol к нему добавлен Эффект shadow внизу
      twebBrowser  Align =Client 
      И все эти компоненты лежат на panel 
      Align =client 
       
      Тестирую на экране 5.5
      Естественно вопрос что произошло и как это исправить 
    • Автор: ENERGY
      Как залить с Delphi Android в базу MySql строки, я примерно понял - составляем GET запрос и вставляем строки в параметры, затем считываем их в PHP скрипте и в базу.
      А вот как быть с картинкой. Как добавить картинку через PHP скрипт из программы на Android?
      POST запрос? Кто нибудь делал такое уже?
      Спасибо 
       
      P.s. На данный момент FireDAC не поддерживает работу с MySQL из под Android. Пока только SQLite и  InterBase ToGo. Даже если в будущем будет поддерживать, многие на этом форуме рекомендуют не использовать прямое подключение к базам из под мобильных систем, а использовать прямые GET запросы к примеру к PHP скриптам. Это связано с нестабильностью интернета т.к. так интернет может часто переключаться (от вышки к вышке) и менять параметры подключения. 
    • Автор: Макс Войтенко
      я знаю что можно добавить внешний файл в программу по пути (assets\internal)(скриншот) (раньше получали к нему доступ через)
      loadfromfille(GetDocumentsPath()+"test.txt")
      Сейчас GetDocumentsPath убрали из RadStudio и походу заменили чем то.
      я использовал в свой программе директорию 
      loadfromfille(GetHomePath()+"test.txt"), но я не знаю куда мне добавить программу через deploymant (скриншот)
      Тоесть
      1)GetDocumentsPath = (assets\internal) 
      2)GetHomePath= ??????
      3)GetDocumentsPath убрали из radstudio.
      Какую мне прописать директорию чтоб я имел к ней доступ через GetHomePath()??

    • Автор: Алмаз Амангельды
      Привет всем! 
      Кодить начал на андроид совсем недавно возникают некие проблемы и спорные вопросы, и перейду сразу к вопросу как пользоваться BoringSSL под Андроид 6 и ниже, возможно ли использовать BoringSSL  на андроидах ниже 6, и как реализовать сие чудо!
      З.Ы если есть возможность опишите по подробнее...
      (дело в том что я хочу спрарсить парочку постов с паблика VK)
       
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу