![](https://fire-monkey.ru/uploads/set_resources_12/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
Евгений Корепов
-
Постов
738 -
Зарегистрирован
-
Посещение
-
Победитель дней
100
Сообщения, опубликованные Евгений Корепов
-
-
15 часов назад, Равиль Зарипов (ZuBy) сказал:
спасибо, круто) я проверял на android wear тоже все показало.
а сетевые параметры считываются только по вайфай, поэтому там пусто
А вот как получить параметры 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 - 100P.S. Кстати для просмотра содержимого удобно поставить ftp-сервер на устройство и с компа клиентом, к примеру Far Manager, смотреть.
-
В 14.03.2016 в 11:57, OnePeople сказал:
Парни может хотя бы кто скажет, procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle) должна работать на андроид?
Не только должна, но и отлично работает. Вот пример:
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) в моем коде.
-
-
Попробовал попрограммить под приставку и победить специфику управления, результат опубликовал в уже существующей теме
-
Проверил на своей приставке UHD200 - по FormKeyDown приходят только цифровые клавиши (0-9), стрелки вверх, вниз, влево, вправо - соответствуют кодам на pc клавиатуре, и приходит код от кнопки назад. На этом все. Как использовать способы предложенные Brovin Yaroslav, не понял совсем, буду гуглить в надежде на прояснение.
Цветные кнопки пульта игнорируются полностью, и что самое обидное, самая главная кнопка "Ok" тоже никак себя не проявляет. Даже пробовал форму с единственной кнопкой, принудительно в onShow устанавливал ей фокус, но реакции ноль.Смена ControlStyle на Platform тоже не помогает.
Хотя все не дельфи приложения адекватно реагируют на кнопку - установил десяток различных приложений, все контролы переключаются нормально.
И еще проблема - в fmx под андроид нет визуального подтверждения фокуса на контроле. Сделал приложение которое по таймеру устанавливает фокус нескольким контролам, но на экране никакой разницы нет, все контролы мертвые.
Вывод пока неутешительный - писать что то под андроидные тв-приставки в Дельфи можно, но управлять приложениями с штатного пульта можно только переключая в режим мышки, что конечно жуткий ад.
-
1 час назад, krapotkin сказал:
а традиционного меню developer mode там я так понимаю нет?
Есть, уже нашел. Много раз тыкнул на версию билда в настройках о устройстве и режим разработчика включился. И даже есть опция перевода 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, интересно на сколько увеличится быстродействие? И еще вопрос - по ядрам процессора нагрузка распределяется равномерно или грузит только одно ядро в вашем случае?
-
37 минут назад, Камышев Александр сказал:
инди создает срэд перед вызовом OnCommandGet, есть HeadersAvailable но оттуда редиректнуть нельзя, а смысл перенаправлять если ресурсы уже заняты...
MaxConnections есть ограничение в IdHTTTPServer, и да, разумная цифра 1024 там не будет лишней.
Смысл в том что в комбинации с IdHTTPServer1.KeepAlive:=False, код ниже будет сразу освобождать ресурсы, т.е. количество соединений не превысит 1024 плюс несколько десятков отправленных в редирект с последующим отключением.
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); begin if CurrentConnectionCount>1024 then AResponseInfo.Redirect('sadas.asdasf.com'); end;
-
Ограничте количество соединений самостоятельно разумной цифрой, при попытке соединения сверх лимита отдавайте в хеадере редирект на следующий сервер в кластере. Если конечно есть следующий сервер...
-
13 часов назад, d7d1cd сказал:
Евгений, получилось разместить приложение? Можете сказать название приложения. Хочется посмотреть, скачать. То есть узнать как это все работает, когда делаешь через RAD.
Пока отложил, Новый год на носу :-) После празднования посмотрю ролик по ссылке выше и попробую еще раз. Приложение будет "Актированный день Ухта", под андроид уже опубликовано, вот как раз хотел под винду потестить.
-
Заплатил микрософту денег, получил доступ к публикации приложений. Но все попытки что сделать провалились.
Видео от ембаркадеры 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]));
-
19 часов назад, ZuBy сказал:
1) в чем проявляются косяки?
2) этот код сорцов студии
3) зачем использовать поток?
1. Увеличение веса приложения - туда натолкано столько кода, понятно что мультиплатформенности (тот же, не используемый в андроиде, TControl в параметрах множества функций). На андроиде может работать, а может и нет, или срабатывать через раз. Не знаю причину, разбираться лень.
2. Да, из исходников и выдран метод. После того как ознакомился с исходниками, решил ограничится коротенькой процедурой.
3. Без потока приложение залипает на 2-3 секунды, не очень приятное ощущение, особенно когда вызов идет с нажатой на MultiView кнопки - анимация закрытия MultiView замораживается в неопределенном состоянии и приложение выглядит как будто умерло :-)
-
19 часов назад, Brovin Yaroslav сказал:
LThread может и не запуститься на андроиде и удалиться до старта, после выхода из метода.
Точно! Сейчас посмотрел свежим взглядом и понял недочет, сделаю LThread глобальным.
-
В 21.11.2016 в 19:20, Рагим сказал:
Не помогло.
На телефоне TCPServer не получает ничего. проставил showmessage практически на все события, которые у него есть, но глухо. TCPClient нормально подключается к телефону и посылает сообщение.
Попробуйте еще телнетом проверить : telnet IP_телефона Порт_сервера ,произойдет соединение или нет?
-
4 минуты назад, Камышев Александр сказал:
tcp сервер на телефоне, жесть
Почему? Для некоторых нужд очень даже. К примеру регулярно пользуюсь ftp-сервером на телефоне - намного удобнее заливать/сливать (по wifi) книги, музыку и прочее, сидя за компьютером в Far manager, чем перетаскивая мышкой в убогих индусских синхронизаторах или пользоваться облачными решениями (залить 30 гигов в dropbox с компьютера (тут нет проблем, инет 450 мегабит), а потом их выкачивать из инета на телефон даже по wifi ac то еще удовольствие).
-
Функция показа виртуальной клавиатуры при подключенной физической включается в настройках самого устройства. Как это сделать программно я не допёр. У каждого производителя по разному, на китайцах и 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(). Велосипед из десятка строчек работает надежно и не зависит от перезагрузок.
-
В 21.11.2016 в 19:20, Рагим сказал:
Не помогло.
На телефоне TCPServer не получает ничего. проставил showmessage практически на все события, которые у него есть, но глухо. TCPClient нормально подключается к телефону и посылает сообщение.
Покажите код сервера, включая инициализацию (назначение портов и прочее)
-
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;
Вот как то так попробуйте
-
AppTethering в эбаркадере написан по быстрому на коленке, через блютус почти не работает, в одном проекте удалось заставить работать с вероятностью один к десяти, т.е. одна успешная передача при десяти попытках. wifi тоже глючит, особенно автоконнект, при ручном связывании и костылях работает вполне прилично.
-
4 часа назад, brunnengi сказал:
Вопрос остался открытым.
1. AppTethering через Bluetooth между двумя смартфонами не работает. (спасибо Rusland'у за подтверждение это проблемы)
2. AppTethering через Wi-Fi не пашет, если на одном устройстве создать моб.точку доступа, а с другого подключиться. Вроде бы они получаются в одной подсети, но по факту AppTethering не пашет.
3. Хотел сделать передачу считывания через QR Code, но объем данных для QR оказался слишком большой. Да и адекватного компонента нет.
Какие ещё варианты передачи данных/строки/файла, из программы на FMX стоящей на смартфоне некой Alice можно передать в такую же программа на FMX стоящей на смартфоне некого Bob'а, максимально легко (не в плане кода, а плане дальней эксплуатации пользователями), вы можете посоветовать, предложить?
Условия:
1. При передачи не использовать интернет. Должна быть передача именно с телефона на телефон.
2. Способ передачи должен быть технически возможен на большинстве устройств. Т.е. например передачу через NFC не рассматриваем, так как есть не у всех.
Могу предложить передачу звуком. Как когда то в модемах. Будет наверное забавно ;-)
P.S. А передачу с помощью QR Code попробуйте следующим образом - не одна картинка с кодом, а несколько с интервалом в N секунд. Давно хотел такое реализовать, но руки не доходили, да и в Delphi с распознаванием и генерацией QR кодов глухо, приходится использовать сторонние приложения.
IdUDPServer1UDPRead на Андроид
в TidUDPServer
Опубликовано
Приложите проект который можно запустить, попробую помочь. Кстати может стоит отказаться от UDP клиента совсем? UDP сервер умеет все тоже что и клиент, плюс умеет слушать порт.