Перейти к содержанию
  • Регистрация

Вопрос

Здравствуйте! Уже почти неделю пытаюсь завести библиотеку org.eclipse.paho.client.mqttv3-1.2.0 в своём приложении. Я знаю о существовании компонента от TMS, но он не умеет работать в фоновом сервисе.
Вот код который я использую для тестов:
 

Спойлер

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.Android.Service,
  FMX.Controls.Presentation, FMX.StdCtrls, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText,
  Androidapi.Helpers, JavaInterfaces, System.Notification, Androidapi.JNI.JavaTypes,
  Androidapi.JNIBridge, System.IOUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    NotificationCenter1: TNotificationCenter;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}

procedure TForm1.Button1Click(Sender: TObject);
begin
 TLocalServiceConnection.StartService('serviceTest2Service');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
LIntent: JIntent;
begin
 LIntent := TJIntent.Create;
  LIntent.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString('com.embarcadero.services.serviceTest2Service'));
  TAndroidHelper.Activity.stopService(LIntent);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
MyNotification: TNotification;
mqtt:JMqttClient;
mqttconopt:JMqttConnectOptions;
//presistance:JMqttDefaultFilePersistence;
jstr:jstring;
//context:JContext;
patch:tpath;
begin
MyNotification := NotificationCenter1.CreateNotification;
  MyNotification.Title := 'Service';  //заголовок
  MyNotification.AlertBody := (patch.GetPublicPath);//текст
  //MyNotification.Name:='Notification Name';
  MyNotification.EnableSound:=True;
  //presistance:=TJMqttDefaultFilePersistence.JavaClass.init(StringToJString(patch.GetPublicPath));
  NotificationCenter1.PresentNotification(MyNotification);
  mqtt:=TJMqttClient.JavaClass.init(StringToJString('tcp://m23.cloudmqtt.com:11021'), StringToJString('java'));
  //MyNotification.AlertBody := '2';//текст
  //NotificationCenter1.PresentNotification(MyNotification);
  mqttconopt:=TJMqttConnectOptions.JavaClass.init();
  //MyNotification.AlertBody := '3';//текст
  //NotificationCenter1.PresentNotification(MyNotification);
  mqttconopt.setUserName(StringToJString('wfntgpvq'));
  jstr:=StringToJString('MWPri3WtH_QZ');
  mqttconopt.setPassword(jstr.toCharArray);
  mqttconopt.setAutomaticReconnect(True);
  mqttconopt.setCleanSession(false);
  //MyNotification.AlertBody := '4';//текст
  //NotificationCenter1.PresentNotification(MyNotification);
  mqtt.connect() ;
  MyNotification.AlertBody := '5';//текст
  NotificationCenter1.PresentNotification(MyNotification);

end;

end.

 

Стандартная библиотека org.eclipse.paho.client.mqttv3-1.2.0 выпадает в ошибку initializer error сразу на строчке 

mqtt:=TJMqttClient.JavaClass.init(StringToJString('tcp://m23.cloudmqtt.com:11021'), StringToJString('java'));

по логам с телефона стало понятно, что проблема в логах ? а конкретно когда библиотека пытается создать логгер выпадает ошибка что не найден файл локализации ru_RU для logcat (сами файлы там вроде как есть). Ладно. Скачал исходники почистил код библиотеки от упоминаний логгера, собрал ииии и ничего. Продвинулся до строчки 

mqtt.connect();

также пробивал 

mqtt.connect(mqttconopt);

ничего не помагает, получаю ошибку сегментации класса 
Пока не понятно куда копать дальше? Возможно что не все библиотеки можно использовать в delphi приложениях? 

P.S Старая версия 1.1.1 тоже не завелась :(

service test2.rar

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


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

Рекомендуемые сообщения

  • 0
57 минут назад, Tarik Live сказал:

Вопрос закрыт. Удалось завести другую библиотеку

которую?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 минуты назад, FREEFAR сказал:

которую?

https://github.com/fusesource/mqtt-client
без танцев с бубном не обошлось, но уже получилось подключится к серверу 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 25.11.2018 в 19:37, Tarik Live сказал:

https://github.com/fusesource/mqtt-client
без танцев с бубном не обошлось, но уже получилось подключится к серверу 

А можно ваш пример реализации приложения?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 25.11.2018 в 18:35, Tarik Live сказал:

Вопрос закрыт. Удалось завести другую библиотеку

Пробовал сделать приложение с сервисом, в самом приложении MQTT работает, а вот сервис запускается и останавливается, но не работает с MQTT, ни отсылает на брокер ни принимает. Я правильно понимаю, этот код принимает сообщения и выдает сообщение MyNotification?

Procedure TDM.MqttMonitor;
var
MyNotification: TNotification;
mess:Jclient_Message;
Bytes: TJavaArray<Byte>;
JS2: JString;
begin
running:=True;
MyNotification := NotificationCenter1.CreateNotification;
MyNotification.Title := 'Mqtt Service';  //заголовок
while True do
begin
  mess:=connection.receive;

  Bytes:=mess.getPayload;
  JS2:=TJString.JavaClass.init(bytes);
  MyNotification.AlertBody := (JStringToString(JS2));//текст
  MyNotification.EnableSound:=True;
  NotificationCenter1.PresentNotification(MyNotification);
end;
end;

А при создании сервиса подписка на топик, который будет мониторится, верно?

topic:=TJTopic.JavaClass.init(StringToJString('android'), TJQoS.JavaClass.AT_LEAST_ONCE);

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
10 минут назад, tetronis сказал:

Пробовал сделать приложение с сервисом, в самом приложении MQTT работает, а вот сервис запускается и останавливается, но не работает с MQTT, ни отсылает на брокер ни принимает. Я правильно понимаю, этот код принимает сообщения и выдает сообщение MyNotification?


Procedure TDM.MqttMonitor;
var
MyNotification: TNotification;
mess:Jclient_Message;
Bytes: TJavaArray<Byte>;
JS2: JString;
begin
running:=True;
MyNotification := NotificationCenter1.CreateNotification;
MyNotification.Title := 'Mqtt Service';  //заголовок
while True do
begin
  mess:=connection.receive;

  Bytes:=mess.getPayload;
  JS2:=TJString.JavaClass.init(bytes);
  MyNotification.AlertBody := (JStringToString(JS2));//текст
  MyNotification.EnableSound:=True;
  NotificationCenter1.PresentNotification(MyNotification);
end;
end;

А при создании сервиса подписка на топик, который будет мониторится, верно?


topic:=TJTopic.JavaClass.init(StringToJString('android'), TJQoS.JavaClass.AT_LEAST_ONCE);

 

Подписка чуть больше, а так да все верно.

topicArray:=TJavaObjectArray<Jtopic>.Create(1);
topic:=TJTopic.JavaClass.init(StringToJString('android/java/'), TJQoS.JavaClass.AT_LEAST_ONCE);
topicArray.Items[0]:=topic;
connection.subscribe(topicArray);

Очень рад, что у вас получилось)

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 18.04.2019 в 22:20, Tarik Live сказал:

Подписка чуть больше, а так да все верно.


topicArray:=TJavaObjectArray<Jtopic>.Create(1);
topic:=TJTopic.JavaClass.init(StringToJString('android/java/'), TJQoS.JavaClass.AT_LEAST_ONCE);
topicArray.Items[0]:=topic;
connection.subscribe(topicArray);

Очень рад, что у вас получилось)

Еще вопрос, а как вы реализовали отслеживание, если отключится от брокера? или будет переподключаться сам? но у меня так не происходит и через время телефон отрубает WiFi и видимо происходит отключение, сообщения не приходят.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 20.04.2019 в 01:40, tetronis сказал:

Еще вопрос, а как вы реализовали отслеживание, если отключится от брокера? или будет переподключаться сам? но у меня так не происходит и через время телефон отрубает WiFi и видимо происходит отключение, сообщения не приходят.

Переподключение я не делал т.к использовал на сотовом интернете а он был всегда

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 20.04.2019 в 01:40, tetronis сказал:

Еще вопрос, а как вы реализовали отслеживание, если отключится от брокера? или будет переподключаться сам? но у меня так не происходит и через время телефон отрубает WiFi и видимо происходит отключение, сообщения не приходят.

Думаю у вашем случае будет полезно. Просто поставьте проверку значения данной функции

mqtt.JPG

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Tarik Live сказал:

Переподключение я не делал т.к использовал на сотовом интернете а он был всегда

за пределы города хоть раз выезжали? :-)

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
17 часов назад, Tarik Live сказал:

Думаю у вашем случае будет полезно. Просто поставьте проверку значения данной функции

mqtt.JPG

Да, функции я смотрел и пробовал использовать, но безуспешно, все виснет при запуске. Вообще разные сборки ведут себя по разному, при отсутствии изменений в коде, что очень странно. Пробовал так же вставить таймер и по нему проверять, подключен ли клиент, но опять же, даже не стартует сервис с таймером(узнал что таймеры не работают в сервисах, так что этот вопрос попробую решить). Думал может вы какой-то код реализовали и обошли грабли.

Но про подключение я имел ввиду, что когда гаснет экран телефона/планшета, устройство выключает WiFi, и соответственно сервис отключается от MQTT брокера, а значит это нужно отлавливать и переподключаться.

Не совсем понятен этот код

if running = False then TTask.Run(MqttMonitor);

Сам running нигде не меняет значение, кроме TDM.MqttMonitor; (running:=True;), а при каких условиях выставляется false?

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
19 часов назад, tetronis сказал:

Да, функции я смотрел и пробовал использовать, но безуспешно, все виснет при запуске. Вообще разные сборки ведут себя по разному, при отсутствии изменений в коде, что очень странно. Пробовал так же вставить таймер и по нему проверять, подключен ли клиент, но опять же, даже не стартует сервис с таймером(узнал что таймеры не работают в сервисах, так что этот вопрос попробую решить). Думал может вы какой-то код реализовали и обошли грабли.

Но про подключение я имел ввиду, что когда гаснет экран телефона/планшета, устройство выключает WiFi, и соответственно сервис отключается от MQTT брокера, а значит это нужно отлавливать и переподключаться.

Не совсем понятен этот код


if running = False then TTask.Run(MqttMonitor);

Сам running нигде не меняет значение, кроме TDM.MqttMonitor; (running:=True;), а при каких условиях выставляется false?

Т.к TDM.AndroidServiceStartCommand может срабатывать несколько раз я ввел   переменную running, чтобы по нескольку раз не стартовал сам mqtt клиент. По вопросу автоматического переподключения я пока не разбирался, нужно чуток больше свободного времени, но есть пару идей. Как протестирую отпишусь. И да, таймер и все что обращается к "форме" в сервисах не работает :(

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 22.04.2019 в 22:02, Tarik Live сказал:

Т.к TDM.AndroidServiceStartCommand может срабатывать несколько раз я ввел   переменную running, чтобы по нескольку раз не стартовал сам mqtt клиент. По вопросу автоматического переподключения я пока не разбирался, нужно чуток больше свободного времени, но есть пару идей. Как протестирую отпишусь. И да, таймер и все что обращается к "форме" в сервисах не работает :(

С таймером разобрался, использую AndroidTimerSetInterval, сделал отсылку на брокер каждые 10 сек данные, но столкнулся с проблемой, сервис через время убивается, шлется какое-то время данные, а потом все, убивается и приложение и сервис...хоть и указано START_STICKY.

А вы как-то реализовывали отсылку из приложения через сервис и обратно, данные MQTT?

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Brovin Yaroslav
      Хочу поделиться с вами знаковой новостью для развития библиотеки FGX Native. Официально выпущено первое Андроид приложение в Google Play Market. 
      Это приложение разработано Станиславом(@sinuke) для учащихся лицея по специальности "Почтовая связь". Оно одновременно является и полным конспектом, который всегда под рукой, и системой проверки своих знаний.
      Полностью разработано на Delphi и стандартных компонентах альфа версии FGX Native 0.9.7.0 в Delphi 10.3 Community Edition. Быстрые списки, гибкая разметка, продвинутая навигация, анимации переходов, поддержка тем и многое другое. Это лишь малая часть того, что было задействовано из текущих возможностей библиотеки.
      Приложение опубликовано в Google Play Market. Вы можете уже прямо сейчас скачать и протестировать приложение самостоятельно, загрузив его по ссылке (https://play.google.com/store/apps/details?id=com.sinukeapps.post).
      Оставляйте свои комментарии и предложения. Они помогут сделать приложение лучше, а FGX Native еще удобнее и стабильнее.
      Релиз первого приложения с использование библиотеки FGX Native - это результат огромной работы, проделанной за эти годы. В тоже время, это сигнал того, что библиотека обладает достаточным минимумом для создания типовых Андроид приложений.
      Ну, и пожалуй самое приятное, это то, что библиотека готова к бета тестированию, которое откроется в ближайшее время.  О начале закрытого бета тестирования будет сообщено позже.
      Отдельное спасибо участникам закрытого альфа тестирования за поддержку, тестирование и идеи по улучшению библиотеки. В настоящее время участниками тестирования ведутся и другие интересные проекты на базе FGX Native, о которых я расскажу позже.
      Следите за новостями.
      Приложение: https://play.google.com/store/apps/details?id=com.sinukeapps.post Автор: Станислав Игнатович @sinuke Минимальные системные требования: Android 5.0 и arm v7         
    • От Yarpda
      В серьезных приложениях (Сбербанк-онлайн или Ютюб и т.п.) когда выходят обновления с новыми функциими, они запускают своеобразный интерактивный ролик. Когда экран затемняется и остается не затемненным только новый элемент экрана например, а на затемненном фоне описывается что делает этот новый элемент.Потом все это плавно переходит к другому элементу и т.д. Выглядит все довольно красиво.
      Задался вопросом, как сделать что-то подобное под FMX. Для себя не нахожу никаких очевидных решений.
      Подскажите если кто знает, направления решения этой задачи?
      Заранее спасибо.
    • От RADStudioDeveloper
      Привет всем!
      Есть необходимость в проекте для Android Delphi FMX (RAD Studio 10.2.3 Tokyo / RAD Studio 10.3.1 Rio ) сохранять изображения с фотокамеры смартфона Android через WiFi соединение в удалённую базу данных Microsoft SQL сервера в поле BLOB.
       
      Подскажите, пожалуйста,  возможные решения, примеры Delphi кода и требуемые компоненты для работы с камерой и SQL сервером через WiFi на Android устройствах.
    • От Евгений Корепов
      Простое приложение для андроид - форма, на ней TWebBrowser. В WebBrowser открываем что то требующее разрешение на геолокацию. У примеру https://www.openstreetmap.org 
      В обычном браузере, при тыке на "Показать мое местоположение" появится popup окно с запросом разрешения на "Доступ к данным о вашем местоположении".
      Но в Delphi приложении описанном выше никакого запроса не приходит. ?
      Нашел решение для java https://forums.fusetools.com/t/geolocation-not-enabled-in-webview-on-android/1374 
      В функцию создания WebView 
      public static Object CreateWebView321(final boolean zoomEnabled,final boolean scrollEnabled) { ScrollableWebView wv = new ScrollableWebView(com.fuse.Activity.getRootActivity()); wv.getSettings().setJavaScriptEnabled(true); wv.getSettings().setUseWideViewPort(true); //enabled viewport meta tag wv.getSettings().setLoadWithOverviewMode(true); //mimic iOS Safari and Android Chrome wv.getSettings().setSupportZoom(zoomEnabled); wv.getSettings().setBuiltInZoomControls(zoomEnabled); wv.getSettings().setDomStorageEnabled(true); wv.setAllowScroll(scrollEnabled); return wv; } рекомендуется добавить следующий код
      wv.getSettings().setGeolocationEnabled(true); wv.setWebChromeClient(new WebChromeClient(){ @Override public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) { callback.invoke(origin, true, false); } }); В модуле FMX.WebBrowser.Android.pas это выглядит так
      constructor TAndroidWebBrowserService.Create; var LayoutParams: JRelativeLayout_LayoutParams; begin FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FWebView.getSettings.setJavaScriptEnabled(True); FListener := TWebBrowserListener.Create(Self); FWebView.SetWebViewListener(FListener); FFocusChangeListener := TFocusChangeListener.Create(Self); FWebView.setOnFocusChangeListener(FFocusChangeListener); FWebView.getSettings.setGeolocationEnabled(True); FWebView.getSettings.setAppCacheEnabled(True); FWebView.getSettings.setDatabaseEnabled(True); FWebView.getSettings.setDomStorageEnabled(True); FWebView.getSettings.setBuiltInZoomControls(True); FWebView.getSettings.setDisplayZoomControls(False); FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FWebView, LayoutParams); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FChildrenContainer, LayoutParams); SetEnableCaching(True); end; Вот суть вопроса - добавить delphi код. Пробую что то вот такое, но закончить ума не хватает
      constructor TAndroidWebBrowserService.Create; var LayoutParams: JRelativeLayout_LayoutParams; begin FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FWebView.getSettings.setJavaScriptEnabled(True); FListener := TWebBrowserListener.Create(Self); FWebView.SetWebViewListener(FListener); FFocusChangeListener := TFocusChangeListener.Create(Self); FWebView.setOnFocusChangeListener(FFocusChangeListener); FWebView.getSettings.setGeolocationEnabled(True); FWebView.setWebChromeClient( TJWebChromeClient.Create.onGeolocationPermissionsShowPrompt( origin: JString; callback: JGeolocationPermissions_Callback);..... FWebView.getSettings.setAppCacheEnabled(True); FWebView.getSettings.setDatabaseEnabled(True); FWebView.getSettings.setDomStorageEnabled(True); FWebView.getSettings.setBuiltInZoomControls(True); FWebView.getSettings.setDisplayZoomControls(False); FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FWebView, LayoutParams); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FChildrenContainer, LayoutParams); SetEnableCaching(True); end;  
    • От brunnengi
      Здравствуйте.
      Как отключить клавиатуру, что бы она не вылетала при получении фокуса в полях ввода?
    • От Mohamed BEN AMMAR
      hello 
      i'm using delphi fmx for building android App
      i have this code for Activating The WI-FI icon from android device:
      This could be found here .
      =========== code ==================
      uses
        Androidapi.Helpers,
        Androidapi.JNI.JavaTypes,
        Androidapi.JNI.GraphicsContentViewText,
        Androidapi.JNIBridge,
        Androidapi.JNI.WifiManager;
        procedure SetWifiEnabled (AEnable: Boolean); var   Obj: JObject;   WifiManager: JWifiManager; begin   Obj: = SharedActivityContext.getSystemService (TJContext.JavaClass.WIFI_SERVICE);   if Obj = nil then     Exit;     WifiManager: = TJWifiManager.Wrap ((Obj as ILocalObject) .GetObjectID);   WifiManager.setWifiEnabled (AEnable); end; 
       
       My question is About Activating Android location:
        Is it possible to activate the service location icon from android device
       programatically without using the Location or TLocationSensor component ....?
      however I know exactly that google has been Deactivate this API since android "4" just for security reasons .....
      but i have seen many apps in playstore can activate the service without using 
      this code here ask the user for activate the location manually .... procedure TForm1.GPSSettings; {$IFDEF ANDROID} var Intent: JIntent; {$ENDIF} begin {$IFDEF ANDROID} Intent := TJIntent.Create; Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); {$ENDIF} end; in other versions like lolipopup can show just the Allow Permission system dialog timer ....( Asking the user for Allowing this App to Activate the service location ......) 
      I have an android device with lolipopup version and i try to execute the location EMBARCADERO sample but 
      this one can not activate the service location ICON even  my device show me the Allow permission dialog where i choose yes allow
      with never ASK....
      Finally ,  I like the WI-FI code above .....
      and i'm wondering if someone here can do this task for me (i need a unit as the WI-FI code above which can offer me
      the option to activate the Service Location ICON )
      I'm ready to paid for that task .....
       
      Sincerelly: Brave.
    • От GMX
      Android 6 MIUI
       ни стандартные примеры не работают, ни попытки что-то свое создать... 
      LastDiscoveredDevices - всегда 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.Bluetooth, System.Bluetooth.Components, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Bluetooth1: TBluetooth; Label1: TLabel; AniIndicator1: TAniIndicator; procedure Button1Click(Sender: TObject); procedure Bluetooth1DiscoverableEnd(const Sender: TObject); procedure Bluetooth1DiscoveryEnd(const Sender: TObject; const ADeviceList: TBluetoothDeviceList); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Bluetooth1DiscoverableEnd(const Sender: TObject); begin Label1.Text := IntToStr(Bluetooth1.LastDiscoveredDevices.Count); end; procedure TForm1.Bluetooth1DiscoveryEnd(const Sender: TObject; const ADeviceList: TBluetoothDeviceList); begin Label1.Text := IntToStr(ADeviceList.Count); AniIndicator1.Enabled :=False; end; procedure TForm1.Button1Click(Sender: TObject); begin Bluetooth1.DiscoverDevices(10000); AniIndicator1.Enabled :=True; end; procedure TForm1.FormCreate(Sender: TObject); begin while not Bluetooth1.Enabled do Bluetooth1.Enabled := True; end; end. В разрешениях bluetooth, bluetooth admin, coarse location, fine location включены... 
    • От Barbanel
      Всем привет!
      Поясните мне плиз, такую вещь как TTouchAnimation, на примере Android.
      Как я это понимаю:
      Есть к примеру некая кнопка, которая имеет несколько состояний, из которых важны: не нажатая и нажатая.
      В момент нажатия, TTouchAnimation пускает расходящийся круг, причем четко из центра нажатия.
      Ок, пусть на самом деле не круг, а картинку, указанную в... собсно, где???
      Как задать эту область, которая должна отображаться как реакция на нажатие?В редакторе среды, у объектов TButtonStyleObject есть свойство TouchAnimation: (TTouchAnimationAdapter), у которого в свою очередь есть свойство Link: (TBitmapLinks), которое как я считал и отвечает за эту область.
      Однако, при клике на это поле ничего не происходит.
      Баг среды, или моя удача???
      Как вы с этим боретесь?
      Других полей, где могли бы быть эти координаты я не нахожу.
      Заранее спасибо!

    • От Yarpda
      Подскажите пожалуйста есть ли какая-то информация по работе с Google календарем из FMX?
      Может быть у кого-то есть практика работы с ним? На форуме информации по этому поводу никакой не нашел.
      Интересует вопрос чтения и создания событий в календаре.
      Заранее благодарю.
    • От Юрий Гусач
      Доброго дня!
      Проясните пожалуйста ситуацию: при запуске программы  под Андроидом на различных устройствах я получаю размеры формы, которые вроде всегда в разы меньше чем максимальное разрешение экрана конкретного устройства. Я пробовал планшеты и разные смартфоны. Написал тестовую прогу, которая выводит СlientScreen и  ClientWidth формы, на которой ничего больше нет. Например для крайне бюджетного смартфона Fly FS-549 получилось 497 х 320, а по паспорту 854x480. Разрешение и так хреновое, а Delphi его еще сильнее уменьшает. -       Почему это происходит и можно ли как то это обойти?
       
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...