Перейти к содержанию
Fire Monkey от А до Я

Евгений Корепов

Пользователи
  • Постов

    738
  • Зарегистрирован

  • Посещение

  • Победитель дней

    100

Весь контент Евгений Корепов

  1. Приложите проект который можно запустить, попробую помочь. Кстати может стоит отказаться от UDP клиента совсем? UDP сервер умеет все тоже что и клиент, плюс умеет слушать порт.
  2. А вот как получить параметры Ethernet? Кстати вот еще способ получения дополнительных параметров: Папка /sys/class/, в ней много всего, к примеру display, ethernet, input, net, video. Вот некоторые файлы папки /sys/class/net/eth0/ (через тире их содержимое): address - f8:f0:82:4f:06:17 carrier - 1 duplex - full mtu - 1500 operstate - up speed - 100 P.S. Кстати для просмотра содержимого удобно поставить ftp-сервер на устройство и с компа клиентом, к примеру Far Manager, смотреть.
  3. Не только должна, но и отлично работает. Вот пример: function TFormMain.CreateUDPServer : Boolean; Var I : Integer; begin Result:=False; IdUDPServer:=TIdUDPServer.Create; IdUDPServer.BroadcastEnabled:=True; IdUDPServer.OnUDPRead:=IdUDPServerUDPRead; for I := Low(UDPPortArray) to High(UDPPortArray) do begin IdUDPServer.Bindings.Clear; with IdUDPServer.Bindings.Add do begin IP:='0.0.0.0'; Port:=UDPPortArray[I]; end; try IdUDPServer.Active:=True; except end; if IdUDPServer.Active then begin FActiveUDPPort:=IdUDPServer.Bindings.Items[0].Port; IPMACLocalPair.Port:=IdUDPServer.Bindings.Items[0].Port; Result:=True; Exit; end; end; FActiveUDPPort:=-1; end; procedure TFormMain.IdUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); Var S : String; begin if (IPMACLocalPair.IP.Equals(ABinding.PeerIP)) And (IPMACLocalPair.Port=ABinding.PeerPort) then exit; DateTimeToString(S, 'hh:nn:ss.zzz', Now); S:=S+' '+BytesToString(AData , IndyUTF8Encoding); S:=S+' | from '+ABinding.PeerIP+':'+ABinding.PeerPort.ToString; Memo.Lines.Insert(0,S); end; На UDPPortArray не обращайте внимание, это если порт занят, то используется другой (UDPPortArray : array [0..2] of Integer = (55771, 55772, 55773);). IdUDPServer.BroadcastEnabled:=True; тоже не нужно, если не собираетесь широковещать. Большинство функций работы с TIdBytes доступны в юните idGlobal, как например BytesToString(AData , IndyUTF8Encoding) в моем коде.
  4. Проверил на тв-приставке. Все отлично, кроме определения сетевых параметров. На приставке wifi выключен, имеется 100Мбит ethernet подключение. Скриншот прилагаю. Прошу прощения за качество, не допер как сделать скриншот с телевизора (или приставки), так что сфотографировал экран ;-)
  5. Попробовал попрограммить под приставку и победить специфику управления, результат опубликовал в уже существующей теме
  6. Проверил на своей приставке UHD200 - по FormKeyDown приходят только цифровые клавиши (0-9), стрелки вверх, вниз, влево, вправо - соответствуют кодам на pc клавиатуре, и приходит код от кнопки назад. На этом все. Как использовать способы предложенные Brovin Yaroslav, не понял совсем, буду гуглить в надежде на прояснение. Цветные кнопки пульта игнорируются полностью, и что самое обидное, самая главная кнопка "Ok" тоже никак себя не проявляет. Даже пробовал форму с единственной кнопкой, принудительно в onShow устанавливал ей фокус, но реакции ноль.Смена ControlStyle на Platform тоже не помогает. Хотя все не дельфи приложения адекватно реагируют на кнопку - установил десяток различных приложений, все контролы переключаются нормально. И еще проблема - в fmx под андроид нет визуального подтверждения фокуса на контроле. Сделал приложение которое по таймеру устанавливает фокус нескольким контролам, но на экране никакой разницы нет, все контролы мертвые. Вывод пока неутешительный - писать что то под андроидные тв-приставки в Дельфи можно, но управлять приложениями с штатного пульта можно только переключая в режим мышки, что конечно жуткий ад.
  7. Есть, уже нашел. Много раз тыкнул на версию билда в настройках о устройстве и режим разработчика включился. И даже есть опция перевода USB в slave режим - видимо можно подключить к компу для отладки. Правда у меня устройство в другой комнате, еще не пробовал. Помню была какое то приложение для отладки по wifi, надо попробовать его. И также закралось подозрение что на приставке не Android TV, а обычный андроид лолипоп 5.1.1. Хотя, честно говоря, пока не понимаю разницы. Андроид ТВ это же не отдельная операционка? Гуглевское приложение (Android TV Remote Control) приставку не видит.
  8. Наконец стал счастливым обладателем телевизионной приставки на android tv Amlogic Vermax UHD200. Все приложения написанные на Дельфи, в моему удивлению, отлично на ней заработали. Конечно специфика управления пультом внесла некоторые не приятные моменты - в большинстве случаем без переключения в режим мышки (стрелками двигаешь курсор по экрану и нажимаешь кнопкой Ок) не обойтись. Пару вопросов коллегам которые уже имеют опыт создания приложений под подобные устройства (помню были темы, но найти не смог): Как деплоить приложение на приставку - apk на флэшку и в приставку? И можно ли производить отладку приложения на устройстве? Как победить специфику управления? Достаточно ли будет управлять фокусом контролов и последовательностью табуляций (переходов по ним). С радостью выслушаю советы, хинты и прочую полезную информацию. Естественно поделюсь своим опытом, когда он появится :-) P.S. Странно, но 99% приложений из маркета, не имеют в интерфейсе поддержку android tv. Из 10 перебранных DLNA проигрывателей, только один полностью готов к работе с пультом. Некоторые приложения вообще отказались работать по причине "Включите WiFi, а то у вас нет сети", хотя приставка подключена 100 мегабитной медью к сети.
  9. А если TIdHTTPServer заменить на TIdTCPServer, интересно на сколько увеличится быстродействие? И еще вопрос - по ядрам процессора нагрузка распределяется равномерно или грузит только одно ядро в вашем случае?
  10. Смысл в том что в комбинации с IdHTTPServer1.KeepAlive:=False, код ниже будет сразу освобождать ресурсы, т.е. количество соединений не превысит 1024 плюс несколько десятков отправленных в редирект с последующим отключением. procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); begin if CurrentConnectionCount>1024 then AResponseInfo.Redirect('sadas.asdasf.com'); end;
  11. Ограничте количество соединений самостоятельно разумной цифрой, при попытке соединения сверх лимита отдавайте в хеадере редирект на следующий сервер в кластере. Если конечно есть следующий сервер...
  12. Пока отложил, Новый год на носу :-) После празднования посмотрю ролик по ссылке выше и попробую еще раз. Приложение будет "Актированный день Ухта", под андроид уже опубликовано, вот как раз хотел под винду потестить.
  13. Заплатил микрософту денег, получил доступ к публикации приложений. Но все попытки что сделать провалились. Видео от ембаркадеры https://www.embarcadero.com/products/rad-studio/windows-10-store-desktop-bridge откровенный фейк, при попытке воспроизвести действия в ролике, создается пакет, но устанавливаться не хочет по причине отсутствия сертификата. Может кто встречал на просторах интернета мануал с нормально расписанными шагами. А то ембаркадера даже хелп не удосужилась создать для странички настройки provisioing в режиме windows Добавление: Кое что начинает проясняться, спасибо Равилю Зарипову за ссылку https://community.embarcadero.com/blogs/entry/appx-development-for-windows-10-store Вот что я упустил: Следующий шаг, чтобы убедиться, что вы включили "режим разработчика" на ОС Windows 10. Это необходимо для установки APPX пакетов, подписанных с тестовыми сертификатами. Вы можете найти эту опцию в Windows 10 "Настройки" в разделе "Обновление и безопасность" и "для разработчиков".
  14. Как то так: MultiPartFormDataStream.AddFormField('KREPL',System.Net.URLClient.TURI.URLEncode(Memo2.Lines[9]));
  15. 1. Увеличение веса приложения - туда натолкано столько кода, понятно что мультиплатформенности (тот же, не используемый в андроиде, TControl в параметрах множества функций). На андроиде может работать, а может и нет, или срабатывать через раз. Не знаю причину, разбираться лень. 2. Да, из исходников и выдран метод. После того как ознакомился с исходниками, решил ограничится коротенькой процедурой. 3. Без потока приложение залипает на 2-3 секунды, не очень приятное ощущение, особенно когда вызов идет с нажатой на MultiView кнопки - анимация закрытия MultiView замораживается в неопределенном состоянии и приложение выглядит как будто умерло :-)
  16. Точно! Сейчас посмотрел свежим взглядом и понял недочет, сделаю LThread глобальным.
  17. Попробуйте еще телнетом проверить : telnet IP_телефона Порт_сервера ,произойдет соединение или нет?
  18. Почему? Для некоторых нужд очень даже. К примеру регулярно пользуюсь ftp-сервером на телефоне - намного удобнее заливать/сливать (по wifi) книги, музыку и прочее, сидя за компьютером в Far manager, чем перетаскивая мышкой в убогих индусских синхронизаторах или пользоваться облачными решениями (залить 30 гигов в dropbox с компьютера (тут нет проблем, инет 450 мегабит), а потом их выкачивать из инета на телефон даже по wifi ac то еще удовольствие).
  19. Функция показа виртуальной клавиатуры при подключенной физической включается в настройках самого устройства. Как это сделать программно я не допёр. У каждого производителя по разному, на китайцах и HTC все просто, на Samsung - долгие танцы с бубном (отключение/подключение физической клавиатуры, тыкания в настройки и т.п.)
  20. Я отказался от TActions ввиду глючности и не предсказуемости. Попробуйте этот код: procedure TFormMain.ListBoxMultiViewItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); Var LThread: TThread; S : String; begin if Not Item.Selectable then exit; if Not Item.Enabled then exit; MultiView.HideMaster; if Item = ListBoxItemShare then begin SendError('Share url'); S:='Всем срочно ставить моё крутое приложение для Android'+#10+URLGooglePlay; LThread:=TThread.CreateAnonymousThread( procedure begin ShareUrl(S); TThread.CurrentThread.Terminate; end); LThread.FreeOnTerminate := true; LThread.Start; end; end; procedure ShareUrl(AURL : String); {$IFDEF ANDROID} Const SMediaLibraryOpenTextWith = 'Send text using:'; var MIMETypes: string; Intent: JIntent; IntentChooser: JIntent; ChooserCaption: string; {$ENDIF ANDROID} begin {$IFDEF ANDROID} try Intent := TJIntent.Create; MIMETypes := 'text/plain'; // Intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE) Intent.setAction(TJIntent.JavaClass.ACTION_SEND); Intent.setType(StringToJString(MIMETypes)); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(AURL)); ChooserCaption := SMediaLibraryOpenTextWith; IntentChooser := TJIntent.JavaClass.createChooser(Intent, StrToJCharSequence(ChooserCaption)); SharedActivity.startActivity(IntentChooser); finally end; {$ENDIF ANDROID} end;
  21. Я делаю велосипед - после покупки делаю хеш-строку на базе "id-продукта + параметры устройства" и пишу ее в файл. При запуске приложения, сначала проверяю наличие и валидность строки, а если не вышло, то потом IsProductPurchased(). Велосипед из десятка строчек работает надежно и не зависит от перезагрузок.
  22. Покажите код сервера, включая инициализацию (назначение портов и прочее)
  23. procedure TDM.TCPServerExecute(AContext: TIdContext); Var AData : TIdBytes; Status : TStatus; begin // AContext.Connection.IOHandler.CheckForDataOnSource(10); if not AContext.Connection.IOHandler.InputBufferIsEmpty then begin AContext.Connection.IOHandler.ReadBytes(AData,VoiceBufferByteLength); // AContext.Connection.IOHandler.ReadStream(); if AData<>Nil then begin Status.DataType:='recieved'; Status.ByteOut:=0; Status.ByteIn:=Length(AData); QueueStatus.PushItem(Status); if Length(AData)=VoiceBufferByteLength then begin BytesToRaw(AData,FVoiceBuffer.Data^,VoiceBufferByteLength); QueuePlay.PushItem(FVoiceBuffer); end; end; end; end; Вот как то так попробуйте
  24. AppTethering в эбаркадере написан по быстрому на коленке, через блютус почти не работает, в одном проекте удалось заставить работать с вероятностью один к десяти, т.е. одна успешная передача при десяти попытках. wifi тоже глючит, особенно автоконнект, при ручном связывании и костылях работает вполне прилично.
  25. Могу предложить передачу звуком. Как когда то в модемах. Будет наверное забавно ;-) P.S. А передачу с помощью QR Code попробуйте следующим образом - не одна картинка с кодом, а несколько с интервалом в N секунд. Давно хотел такое реализовать, но руки не доходили, да и в Delphi с распознаванием и генерацией QR кодов глухо, приходится использовать сторонние приложения.
×
×
  • Создать...