Евгений Корепов
Пользователи-
Постов
738 -
Зарегистрирован
-
Посещение
-
Победитель дней
100
Весь контент Евгений Корепов
-
Приложите проект который можно запустить, попробую помочь. Кстати может стоит отказаться от UDP клиента совсем? UDP сервер умеет все тоже что и клиент, плюс умеет слушать порт.
-
А вот как получить параметры 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, смотреть.
- 40 ответов
-
Не только должна, но и отлично работает. Вот пример: 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) в моем коде.
-
Проверил на тв-приставке. Все отлично, кроме определения сетевых параметров. На приставке wifi выключен, имеется 100Мбит ethernet подключение. Скриншот прилагаю. Прошу прощения за качество, не допер как сделать скриншот с телевизора (или приставки), так что сфотографировал экран ;-)
- 40 ответов
-
Попробовал попрограммить под приставку и победить специфику управления, результат опубликовал в уже существующей теме
-
Проверил на своей приставке UHD200 - по FormKeyDown приходят только цифровые клавиши (0-9), стрелки вверх, вниз, влево, вправо - соответствуют кодам на pc клавиатуре, и приходит код от кнопки назад. На этом все. Как использовать способы предложенные Brovin Yaroslav, не понял совсем, буду гуглить в надежде на прояснение. Цветные кнопки пульта игнорируются полностью, и что самое обидное, самая главная кнопка "Ok" тоже никак себя не проявляет. Даже пробовал форму с единственной кнопкой, принудительно в onShow устанавливал ей фокус, но реакции ноль.Смена ControlStyle на Platform тоже не помогает. Хотя все не дельфи приложения адекватно реагируют на кнопку - установил десяток различных приложений, все контролы переключаются нормально. И еще проблема - в fmx под андроид нет визуального подтверждения фокуса на контроле. Сделал приложение которое по таймеру устанавливает фокус нескольким контролам, но на экране никакой разницы нет, все контролы мертвые. Вывод пока неутешительный - писать что то под андроидные тв-приставки в Дельфи можно, но управлять приложениями с штатного пульта можно только переключая в режим мышки, что конечно жуткий ад.
-
Есть, уже нашел. Много раз тыкнул на версию билда в настройках о устройстве и режим разработчика включился. И даже есть опция перевода USB в slave режим - видимо можно подключить к компу для отладки. Правда у меня устройство в другой комнате, еще не пробовал. Помню была какое то приложение для отладки по wifi, надо попробовать его. И также закралось подозрение что на приставке не Android TV, а обычный андроид лолипоп 5.1.1. Хотя, честно говоря, пока не понимаю разницы. Андроид ТВ это же не отдельная операционка? Гуглевское приложение (Android TV Remote Control) приставку не видит.
-
Наконец стал счастливым обладателем телевизионной приставки на android tv Amlogic Vermax UHD200. Все приложения написанные на Дельфи, в моему удивлению, отлично на ней заработали. Конечно специфика управления пультом внесла некоторые не приятные моменты - в большинстве случаем без переключения в режим мышки (стрелками двигаешь курсор по экрану и нажимаешь кнопкой Ок) не обойтись. Пару вопросов коллегам которые уже имеют опыт создания приложений под подобные устройства (помню были темы, но найти не смог): Как деплоить приложение на приставку - apk на флэшку и в приставку? И можно ли производить отладку приложения на устройстве? Как победить специфику управления? Достаточно ли будет управлять фокусом контролов и последовательностью табуляций (переходов по ним). С радостью выслушаю советы, хинты и прочую полезную информацию. Естественно поделюсь своим опытом, когда он появится :-) P.S. Странно, но 99% приложений из маркета, не имеют в интерфейсе поддержку android tv. Из 10 перебранных DLNA проигрывателей, только один полностью готов к работе с пультом. Некоторые приложения вообще отказались работать по причине "Включите WiFi, а то у вас нет сети", хотя приставка подключена 100 мегабитной медью к сети.
-
А если TIdHTTPServer заменить на TIdTCPServer, интересно на сколько увеличится быстродействие? И еще вопрос - по ядрам процессора нагрузка распределяется равномерно или грузит только одно ядро в вашем случае?
- 45 ответов
-
- TCriticalSection
- TThread
-
(и ещё 1 )
C тегом:
-
Смысл в том что в комбинации с IdHTTPServer1.KeepAlive:=False, код ниже будет сразу освобождать ресурсы, т.е. количество соединений не превысит 1024 плюс несколько десятков отправленных в редирект с последующим отключением. procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); begin if CurrentConnectionCount>1024 then AResponseInfo.Redirect('sadas.asdasf.com'); end;
- 45 ответов
-
- TCriticalSection
- TThread
-
(и ещё 1 )
C тегом:
-
Ограничте количество соединений самостоятельно разумной цифрой, при попытке соединения сверх лимита отдавайте в хеадере редирект на следующий сервер в кластере. Если конечно есть следующий сервер...
- 45 ответов
-
- TCriticalSection
- TThread
-
(и ещё 1 )
C тегом:
-
Заплатил микрософту денег, получил доступ к публикации приложений. Но все попытки что сделать провалились. Видео от ембаркадеры 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 "Настройки" в разделе "Обновление и безопасность" и "для разработчиков".
-
Как то так: MultiPartFormDataStream.AddFormField('KREPL',System.Net.URLClient.TURI.URLEncode(Memo2.Lines[9]));
-
1. Увеличение веса приложения - туда натолкано столько кода, понятно что мультиплатформенности (тот же, не используемый в андроиде, TControl в параметрах множества функций). На андроиде может работать, а может и нет, или срабатывать через раз. Не знаю причину, разбираться лень. 2. Да, из исходников и выдран метод. После того как ознакомился с исходниками, решил ограничится коротенькой процедурой. 3. Без потока приложение залипает на 2-3 секунды, не очень приятное ощущение, особенно когда вызов идет с нажатой на MultiView кнопки - анимация закрытия MultiView замораживается в неопределенном состоянии и приложение выглядит как будто умерло :-)
-
Точно! Сейчас посмотрел свежим взглядом и понял недочет, сделаю LThread глобальным.
-
Попробуйте еще телнетом проверить : telnet IP_телефона Порт_сервера ,произойдет соединение или нет?
- 9 ответов
-
- Delphi
- TIdTcpClient
-
(и ещё 1 )
C тегом:
-
Почему? Для некоторых нужд очень даже. К примеру регулярно пользуюсь ftp-сервером на телефоне - намного удобнее заливать/сливать (по wifi) книги, музыку и прочее, сидя за компьютером в Far manager, чем перетаскивая мышкой в убогих индусских синхронизаторах или пользоваться облачными решениями (залить 30 гигов в dropbox с компьютера (тут нет проблем, инет 450 мегабит), а потом их выкачивать из инета на телефон даже по wifi ac то еще удовольствие).
- 9 ответов
-
- Delphi
- TIdTcpClient
-
(и ещё 1 )
C тегом:
-
Функция показа виртуальной клавиатуры при подключенной физической включается в настройках самого устройства. Как это сделать программно я не допёр. У каждого производителя по разному, на китайцах и HTC все просто, на Samsung - долгие танцы с бубном (отключение/подключение физической клавиатуры, тыкания в настройки и т.п.)
-
Я отказался от 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;
-
Я делаю велосипед - после покупки делаю хеш-строку на базе "id-продукта + параметры устройства" и пишу ее в файл. При запуске приложения, сначала проверяю наличие и валидность строки, а если не вышло, то потом IsProductPurchased(). Велосипед из десятка строчек работает надежно и не зависит от перезагрузок.
-
Покажите код сервера, включая инициализацию (назначение портов и прочее)
- 9 ответов
-
- Delphi
- TIdTcpClient
-
(и ещё 1 )
C тегом:
-
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; Вот как то так попробуйте
- 9 ответов
-
- Delphi
- TIdTcpClient
-
(и ещё 1 )
C тегом:
-
AppTethering в эбаркадере написан по быстрому на коленке, через блютус почти не работает, в одном проекте удалось заставить работать с вероятностью один к десяти, т.е. одна успешная передача при десяти попытках. wifi тоже глючит, особенно автоконнект, при ручном связывании и костылях работает вполне прилично.
-
Могу предложить передачу звуком. Как когда то в модемах. Будет наверное забавно ;-) P.S. А передачу с помощью QR Code попробуйте следующим образом - не одна картинка с кодом, а несколько с интервалом в N секунд. Давно хотел такое реализовать, но руки не доходили, да и в Delphi с распознаванием и генерацией QR кодов глухо, приходится использовать сторонние приложения.