brunnengi Опубликовано 25 октября, 2016 Поделиться Опубликовано 25 октября, 2016 (изменено) Здравствуйте. Необходимо добавить в приложение возможность обменяться строками данных между смартфонами. Задача такая. Смартфон "Alice" сгенерировал некую строку, допустим такую "somegendatadrom_a". На смартфоне "Bob" приложение должно прочитать/получить строку "somegendatadrom_a". Как проще всего, без болезненнее, быстро, эффективно и с помощью каких компонентов это сделать? Изменено 5 ноября, 2016 пользователем Andrey Efimov Исправил опечатку в заголовке Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 25 октября, 2016 Модераторы Поделиться Опубликовано 25 октября, 2016 2 часа назад, brunnengi сказал: Здравствуйте. Необходимо добавить в приложение возможность обменяться строками данных между смартфонами. Задача такая. Смартфон "Alice" сгенерировал некую строку, допустим такую "somegendatadrom_a". На смартфоне "Bob" приложение должно прочитать/получить строку "somegendatadrom_a". Как проще всего, без болезненнее, быстро, эффективно и с помощью каких компонентов это сделать? App Tethering - проще некуда. Статьи, есть у меня в блоге и у других разработчиков, и в справке. Kitty и Равиль Зарипов (ZuBy) 2 Цитата Ссылка на комментарий
0 brunnengi Опубликовано 27 октября, 2016 Автор Поделиться Опубликовано 27 октября, 2016 Сделал пример из блога. Но как только перевожу и клиент и сервер блутуз, то все перестает работать. В чем может быть проблема? Права на блутуз выставлены. Проверяю через два смартфона. Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 октября, 2016 Поделиться Опубликовано 27 октября, 2016 brunnengi, приложите код Andrey Efimov 1 Цитата Ссылка на комментарий
0 brunnengi Опубликовано 27 октября, 2016 Автор Поделиться Опубликовано 27 октября, 2016 (изменено) Серверная часть: Спойлер unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IPPeerClient, IPPeerServer, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, System.Tether.Manager, FMX.StdCtrls, System.Tether.AppProfile; type TForm1 = class(TForm) Memo1: TMemo; TetheringManager1: TTetheringManager; Button1: TButton; TetheringAppProfile1: TTetheringAppProfile; procedure TetheringManager1PairedFromLocal(const Sender: TObject; const AManagerInfo: TTetheringManagerInfo); procedure TetheringManager1PairedToRemote(const Sender: TObject; const AManagerInfo: TTetheringManagerInfo); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin TetheringManager1.AutoConnect(); end; procedure TForm1.TetheringManager1PairedFromLocal(const Sender: TObject; const AManagerInfo: TTetheringManagerInfo); begin Memo1.Lines.Add('PairedFromLocal: ' + AManagerInfo.ManagerIdentifier + ' ' + AManagerInfo.ManagerText); end; procedure TForm1.TetheringManager1PairedToRemote(const Sender: TObject; const AManagerInfo: TTetheringManagerInfo); begin Memo1.Lines.Add('PairedToRemote: ' + AManagerInfo.ManagerIdentifier + ' ' + AManagerInfo.ManagerText); end; end. Клиентская часть: Спойлер unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IPPeerClient, IPPeerServer, System.Tether.Manager, System.Tether.AppProfile, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo; type TForm1 = class(TForm) Memo1: TMemo; TetheringAppProfile1: TTetheringAppProfile; TetheringManager1: TTetheringManager; procedure TetheringAppProfile1ResourceReceived(const Sender: TObject; const AResource: TRemoteResource); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormShow(Sender: TObject); begin TetheringManager1.AutoConnect(); end; procedure TForm1.TetheringAppProfile1ResourceReceived(const Sender: TObject; const AResource: TRemoteResource); begin if AResource.ResType = TRemoteResourceType.Data then begin Memo1.Lines.Add(AResource.Hint + ': ' + AResource.Value.AsString); TetheringAppProfile1.Resources.FindByName('TestSend').Value := '[Server] Постоянный ресурс'; end; end; end. TetheringManager.AllowedAdapters = Bluetooth; Когда стоит Network и устройства подключены через ВайФай, то все работает. Но как тока и у сервера и клиента ставлю Bluetooth и собрегаю смартфоны между собой, то перестает работать. Изменено 27 октября, 2016 пользователем brunnengi Цитата Ссылка на комментарий
0 brunnengi Опубликовано 30 октября, 2016 Автор Поделиться Опубликовано 30 октября, 2016 Кто нибудь попробуйте AppTethering через Bluetooth между смартфонами. Если они не работают, то надо писать в QC. Rusland 1 Цитата Ссылка на комментарий
0 Rusland Опубликовано 31 октября, 2016 Поделиться Опубликовано 31 октября, 2016 (изменено) В 30.10.2016 в 17:43, brunnengi сказал: Кто нибудь попробуйте AppTethering через Bluetooth между смартфонами. Проверял - у меня не работает (Bluetooth включен, в Permission добавлено) Изменено 2 ноября, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 brunnengi Опубликовано 2 ноября, 2016 Автор Поделиться Опубликовано 2 ноября, 2016 (изменено) Вопрос остался открытым. 1. AppTethering через Bluetooth между двумя смартфонами не работает. (спасибо Rusland'у за подтверждение это проблемы) 2. AppTethering через Wi-Fi не пашет, если на одном устройстве создать моб.точку доступа, а с другого подключиться. Вроде бы они получаются в одной подсети, но по факту AppTethering не пашет. 3. Хотел сделать передачу считывания через QR Code, но объем данных для QR оказался слишком большой. Да и адекватного компонента нет. Какие ещё варианты передачи данных/строки/файла, из программы на FMX стоящей на смартфоне некой Alice можно передать в такую же программа на FMX стоящей на смартфоне некого Bob'а, максимально легко (не в плане кода, а плане дальней эксплуатации пользователями), вы можете посоветовать, предложить? Условия: 1. При передачи не использовать интернет. Должна быть передача именно с телефона на телефон. 2. Способ передачи должен быть технически возможен на большинстве устройств. Т.е. например передачу через NFC не рассматриваем, так как есть не у всех. Изменено 2 ноября, 2016 пользователем brunnengi Kitty 1 Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 2 ноября, 2016 Поделиться Опубликовано 2 ноября, 2016 (изменено) 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 кодов глухо, приходится использовать сторонние приложения. Изменено 2 ноября, 2016 пользователем Евгений Корепов Цитата Ссылка на комментарий
0 brunnengi Опубликовано 2 ноября, 2016 Автор Поделиться Опубликовано 2 ноября, 2016 Про звук мне грешным делом тоже мысли приходили. Но это может и забавно, но вряд ли удобно. Да и в плане кода под Андроид придется сильно попотеть, а скорость передачи будет уж слишком низкая. С таким же успехом можно и камерой мигания светодиода считывать, тоже будет забавно, но в практических целях не очень как то. Смена картинок с QR кодом тоже приходила в голову. Но это опять таки не удобно. Получается сначала один должен отфоткать 10 картинок, потом другой у первого 10 фоток. Удобство пропадает. Блин, вот с Embacadero всегда так, вроде что то интересное вводят, вроде примеры работают, но в реальных проектах становится тяжело применимо, потому что какая то мелочь не даёт этого сделать. Самое что интересное, многое что вводится не так остро нужно, как самые обыкновенные, но хорошо работающие стандартные процедуры. Взять ту же камеру, которая по сей день с тормозами работает. Теперь и AppTethering который работает тока при "определенных" условиях. Блин, а вед задача передать данные с одного устройства на другое звучит как вполне тривиальная. Но увы, это Embacadero, детка! В реальных проектах приходится использовать много разных "блоков" и когда эти "блоки" сами по себе плохо работают, разработка превращается в ад. Цитата Ссылка на комментарий
0 kami Опубликовано 3 ноября, 2016 Поделиться Опубликовано 3 ноября, 2016 8 часов назад, brunnengi сказал: Самое что интересное, многое что вводится не так остро нужно, как самые обыкновенные, но хорошо работающие стандартные процедуры Вместо Embarcadero подставить любую другую IDE под мобильные платформы - и разработчики, использующие эту "другую" IDE с вами согласятся безоговорочно Одни отзывы про XCode чего стоят Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 3 ноября, 2016 Поделиться Опубликовано 3 ноября, 2016 AppTethering в эбаркадере написан по быстрому на коленке, через блютус почти не работает, в одном проекте удалось заставить работать с вероятностью один к десяти, т.е. одна успешная передача при десяти попытках. wifi тоже глючит, особенно автоконнект, при ручном связывании и костылях работает вполне прилично. Kitty 1 Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 3 ноября, 2016 Модераторы Поделиться Опубликовано 3 ноября, 2016 Удалось проверить. Итог: Демка - C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\App Tethering\MediaPlayer НЕ РАБОТАЕТ! Демка - C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\Tethering\MediaPlayer РАБОТАЕТ! (сейчас вот сижу играюсь, с телефона управляю этим плеером, через BlueTooth) Ап. с телефона удалось законектиться и к первой демке, но приложение на телефоне из второй демки. Супер Ап. Мой пример из статьи App Tethering #3: Передача и получение данных отлично и с первого раза заработал. Добавил два разрешения для блютуса в мобильном приложении и выставил TetheringManager.AllowedAdapters = Bluetooth; в обоих проектах, всё. Спойлер При тестировании, оба устройства были видимыми. p.s. Не знаю, почему (частично) не завелась первая демка, выяснять не хочу, т.к. остальные примеры рабочие... Kitty 1 Цитата Ссылка на комментарий
0 brunnengi Опубликовано 5 ноября, 2016 Автор Поделиться Опубликовано 5 ноября, 2016 Спасибо за проведенные тесты. Но увы вариант с смартфон <--> смартфон, так и не разрешен. Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 5 ноября, 2016 Модераторы Поделиться Опубликовано 5 ноября, 2016 4 часа назад, brunnengi сказал: Спасибо за проведенные тесты. Но увы вариант с смартфон <--> смартфон, так и не разрешен. Эм... давайте больше информации. Только что сконектил два телефона (Huawei Y541-U02 - Android 4.4.2 и LG Optimus L7 P705 - Android 4.1.2 ) Без каких либо проблем и с первого раза. Спойлер Kitty 1 Цитата Ссылка на комментарий
0 brunnengi Опубликовано 5 ноября, 2016 Автор Поделиться Опубликовано 5 ноября, 2016 Через AppTetring, через Bluetooth? Можно apk для теста? А то может тут личная во мне проблема(( Цитата Ссылка на комментарий
1 Модераторы Andrey Efimov Опубликовано 5 ноября, 2016 Модераторы Поделиться Опубликовано 5 ноября, 2016 10 минут назад, brunnengi сказал: Через AppTetring, через Bluetooth? Можно apk для теста? А то может тут личная во мне проблема(( Да, конечно, там даже на фото видно, что включён bluetooth на LG, а все остальные сети отключены (вкл. мобильную). Да, можно конечно. Я вам выложу вообще весь проект, с уже собранными приложениями, т.е. в папках лежат исходники, apk-файлы, exe-файлы. (осторожно весит 145 МБ) залил на свой Google Диск https://drive.google.com/open?id=0BwEZB8sRo0DSc3lodnJWbDR3Nms На каких девайсах пробуете и какие версии Андроида на них? p.s. Собрано на Delphi Berlin Update 1 Kitty, Евгений Корепов и Равиль Зарипов (ZuBy) 3 Цитата Ссылка на комментарий
0 brunnengi Опубликовано 6 ноября, 2016 Автор Поделиться Опубликовано 6 ноября, 2016 Цитата На каких девайсах пробуете и какие версии Андроида на них? Samsung Note3 (Android 5.0) <--> Samsung Tab3 (модель SM-T531, Android 5.0.2) Спасибо за весь выложенный проект. Действительно через твой проект работает. Буду пробовать ещё раз создать с нуля у себя и посмотрю что выйдет. Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 6 ноября, 2016 Модераторы Поделиться Опубликовано 6 ноября, 2016 1 час назад, brunnengi сказал: Samsung Note3 (Android 5.0) <--> Samsung Tab3 (модель SM-T531, Android 5.0.2) Спасибо за весь выложенный проект. Действительно через твой проект работает. Буду пробовать ещё раз создать с нуля у себя и посмотрю что выйдет. Не за что. Перед окончательной сборкой, проверь права в манифесте, на всякий случай. Ещё можно сделать Clean проекта и потом уже собирать. Цитата Ссылка на комментарий
0 Rusland Опубликовано 7 ноября, 2016 Поделиться Опубликовано 7 ноября, 2016 (изменено) Да, можно конечно. Я вам выложу вообще весь проект, с уже собранными приложениями, т.е. в папках лежат исходники, apk-файлы, exe-файлы. (осторожно весит 145 МБ) залил на свой Google Диск https://drive.google.com/open?id=0BwEZB8sRo0DSc3lodnJWbDR3Nms А у меня все равно не работает. Пробовал на Lenovo Tab 2 (Android 5.0), Ursus 180 (Android 5.1), Texet X-Basics (Android 4.2). Пробовал и скомпилированные apk, и сам компилил на Berlin - отказывается работать. При старте Client выдает: Project Client.apk raised exception class EJNIException with message 'java.io.IOException: [JSR82] accept: Connection is not created (failed or aborted).'. Потом если нажать Send, то программа выдает Argument out of range. При старте Server выдает: Project Server.apk raised exception class EJNIException with message 'java.io.IOException: Try again'. Изменено 7 ноября, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 7 ноября, 2016 Модераторы Поделиться Опубликовано 7 ноября, 2016 1 час назад, Rusland сказал: А у меня все равно не работает. Пробовал на Lenovo Tab 2 (Android 5.0), Ursus 180 (Android 5.1), Texet X-Basics (Android 4.2). Пробовал и скомпилированные apk, и сам компилил на Berlin - отказывается работать. При старте Client выдает: Project Client.apk raised exception class EJNIException with message 'java.io.IOException: [JSR82] accept: Connection is not created (failed or aborted).'. Потом если нажать Send, то программа выдает Argument out of range. При старте Server выдает: Project Server.apk raised exception class EJNIException with message 'java.io.IOException: Try again'. Судя по интернету, есть такая проблема на некоторых девайсах. Что можно попробовать: 1) Перезапуск устройств и последующая попытка подключения 2) Провести сопряжение устройств и оставить их видимыми, попытаться подключиться Если не получится, тогда лучше сразу сюда https://quality.embarcadero.com/secure/Dashboard.jspa отписаться. (укажите всю информацию, логи, модели устройств, демо проекты) Rusland 1 Цитата Ссылка на комментарий
Вопрос
brunnengi
Здравствуйте.
Необходимо добавить в приложение возможность обменяться строками данных между смартфонами.
Задача такая. Смартфон "Alice" сгенерировал некую строку, допустим такую "somegendatadrom_a".
На смартфоне "Bob" приложение должно прочитать/получить строку "somegendatadrom_a".
Как проще всего, без болезненнее, быстро, эффективно и с помощью каких компонентов это сделать?
Изменено пользователем Andrey EfimovИсправил опечатку в заголовке
Ссылка на комментарий
19 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.