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

Служба - двухсторонняя связь


S_007

Вопрос

Пересмотрел кучу примеров в которых сервис передает сообщение основной программе и не нашел как наоборот в сервис передать какие то значения из основной программы, например в сервисе крутится таймер и его переменные надо изменить из программы, возможно ли такое? 

Ссылка на комментарий

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

  • 2
  • Модераторы

Например вот так.

в программе:

var
  LIntent: JIntent;
begin
  LIntent := TJIntent.Create;
  LIntent.setClassName(TAndroidHelper.Context.getPackageName(), StringToJString('com.embarcadero.services.nameservice'));
  LIntent.putExtra(StringToJString('NameForValue'), StringToJString('Value'));
  TAndroidHelper.Activity.StartService(LIntent);

в сервисе:

function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer;
var
  Value: string;
begin
  Value := JStringToString(Intent.getStringExtra(StringToJString('NameForValue')));
  // дальше что-то делаем
end;

 

Ссылка на комментарий
  • 0

Andrey Большое Спасибо! Ну будьте добры  пожалуйста пример на основании первого только передача каких то данных с сервиса в программу, просто пока не пойму, у Вас в примере вы используете intenr а с сервиса в программу нужно через  Notification передавать?

Изменено пользователем S_007
Ссылка на комментарий
  • 0
12 часа назад, S_007 сказал:

Пересмотрел кучу примеров в которых сервис передает сообщение основной программе и не нашел как наоборот в сервис передать какие то значения из основной программы, например в сервисе крутится таймер и его переменные надо изменить из программы, возможно ли такое? 

Посмотрите сюда

Пример есть

Ссылка на комментарий
  • 0

mazayhin Спасибо! Понял только то что там ребята борются с глюками и в конечном итоге победить их не удалось, да и там речь шла о фантиках (обертках), как я понял нужно знать java, потом еще кучу телодвижений чтоб подружить с проектом,

печально что нет готового рабочего примера двухсторонней связи 

Ссылка на комментарий
  • 1
1 час назад, S_007 сказал:

mazayhin Спасибо! Понял только то что там ребята борются с глюками и в конечном итоге победить их не удалось, да и там речь шла о фантиках (обертках), как я понял нужно знать java, потом еще кучу телодвижений чтоб подружить с проектом,

печально что нет готового рабочего примера двухсторонней связи 

А проект пробовали смотреть? Бояться не надо, там вирусов нет.

Да, там подключается обертка для локального менеджера. Но можете использовать и глобальный, без этой доп. обертки, для того же Intent надо будет все равно подключать в проект Androidapi.JNI.GraphicsContentViewText.

Ну и java там не особо "пахнет" - если бы смотрели, увидели бы, что

FLocalBroadcastManager := TJLocalBroadcastManager.JavaClass.getInstance
   (TAndroidHelper.Context.getApplicationContext);
   FMyListener := TMyReceiverListener.Create;
   FBroadcastReceiver := TJFMXBroadcastReceiver.JavaClass.init(FMyListener);
   FIntentFilter := TJIntentFilter.Create;
   FIntentFilter.addAction(StringToJString(MY_SVC_ACTION));
   FLocalBroadcastManager.RegisterReceiver(FBroadcastReceiver, FIntentFilter);

к примеру, jav'у напоминает ооочень отдаленно.

Нет готового рабочего и без "фантиков" как вы сказали - чем тогда TAndroidHelper.Context.sendBroadcast(TJIntent.JavaClass.init(StringToJString('action'))) не готовый и не рабочий?

Не, можно конечно, в файл писать/читать, но зачем?

Ну проблемы то они везде есть, и там может, но у нас по крайней мере проблем не возникал, ни с локальным (из поста) ни с глобальным.

Приложение так с 2 своими службами общается, полет нормальный.

 

Изменено пользователем mazayhin
Ссылка на комментарий
  • 0

mazayhin Благодарю сердечно!

11 час назад, mazayhin сказал:

чем тогда TAndroidHelper.Context.sendBroadcast(TJIntent.JavaClass.init(StringToJString('action'))) не готовый и не рабочий?

буду искать что Вы этой строкой имели ввиду

меня бы устроил любой рабочий маленький пример, хотя бы одну букву отправить в сервис и обратно, не важно каким методом 

 

Ссылка на комментарий
  • 1
15 минут назад, S_007 сказал:

mazayhin Благодарю сердечно!

буду искать что Вы этой строкой имели ввиду

меня бы устроил любой рабочий маленький пример, хотя бы одну букву отправить в сервис и обратно, не важно каким методом 

 

Дак пример посмотрите! Он рабочий больше чем полностью :)

Там как раз приложение с сервисом общается через подписку. Если в процедурах RegisterReceiver и UnregisterReceiver не будете снимать комментарии, то как раз и будет использоваться глобальный ресивер ("эта строчка").

Дополнительно можете передать данные если сделаете Intent.putExtra(что то тут) и прочитаете Intent.getExtra

Ссылка на комментарий
  • 1

скачал пример при компиляции ошибка

[Exec Error] The command "PATH C:\Program Files\Java\jdk1.8.0_161\bin;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl;C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE7\IDE_spoof;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ & "C:\Program Files\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\build-tools\23.0.2\dx.bat" --dex --output="C:\Users\Admin\Documents\Embarcadero\Studio\LocalBroadCastReceiver\LocalBroadCastReceiver\Android\Release\LBCRService-dexed.jar" "C:\Users\Admin\Documents\Embarcadero\Studio\LocalBroadCastReceiver\LocalBroadCastReceiver\LBCRService\Android\Release\LBCRService.jar"" exited with code 1.

 

терпения больше нет, надоели эти танцы с бубном с этой Емба- ркадеро

поставил андроид студию куча примеров, жалею очень, что потратил столько времени на изучение глюков FMX

всем новичкам таким как я, советую, не ведитесь хоть вы на замануху кросплатформености, не тратьте время, это развод за космические деньги

Ссылка на комментарий
  • 0
13 часа назад, S_007 сказал:

скачал пример при компиляции ошибка

[Exec Error] The command "PATH C:\Program Files\Java\jdk1.8.0_161\bin;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl;C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE7\IDE_spoof;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ & "C:\Program Files\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\build-tools\23.0.2\dx.bat" --dex --output="C:\Users\Admin\Documents\Embarcadero\Studio\LocalBroadCastReceiver\LocalBroadCastReceiver\Android\Release\LBCRService-dexed.jar" "C:\Users\Admin\Documents\Embarcadero\Studio\LocalBroadCastReceiver\LocalBroadCastReceiver\LBCRService\Android\Release\LBCRService.jar"" exited with code 1.

 

терпения больше нет, надоели эти танцы с бубном с этой Емба- ркадеро

поставил андроид студию куча примеров, жалею очень, что потратил столько времени на изучение глюков FMX

всем новичкам таким как я, советую, не ведитесь хоть вы на замануху кросплатформености, не тратьте время, это развод за космические деньги

Вот интересный вы человек! 

Вам показали пример, вы не посмотрев начпли говорить про какие то левые фантики.

Потом все же скачали, и просто нажали зеленую кнопку, а оно не вот ошбками плюется, да за такие деньги! Ужас, как таким ...ном пользоваться можо!!! Не работает!!!!

А можно было просто посмотреть на том же доквики, там расписан порядок работы с срвисами. Вы билд делали сервису перед запуском то? Угадаю- нет конечно! А если бы сделали все как надо, а не бубны искали для танцев, заработало бы.

Когда вот в AS gradle начнет ошибками кидать, кто виноват будет? Майкрософт наверное, что в свою ОС дал эту поделку ставить?

Ссылка на комментарий
  • 0
В 02.03.2018 в 10:40, S_007 сказал:

...как я понял нужно знать java, потом еще кучу телодвижений чтоб подружить с проектом,

Сначала человек пишет...

потом...

Цитата

поставил андроид студию куча примеров, жалею очень, что потратил столько времени на изучение глюков FMX

Товарищ, но в АС же JAVA! :)) хохмачи конечно... удивляюсь каждый раз...

Ссылка на комментарий
  • 0

Дак на java же примеров куча! С каджого по строчке, авось заработает. А не заработает - ну так крайний всегда найдется :) может это рад-студия на андроид студию порчу при установке наняла

Отсюда и ясно становится, почему большинство относится к delphi как к игрушке для 9 класса, на котором ничего путнего не сделать, а то что и сделано то ужасного вида и "не модно-прогрессивно". 

S_007, а нужен ли вообще вам сервис? Нет, так присмотритесь к cordova, написали html, без javascript'a вообще в сети наверное не одного места не осталось, и все. Не надо ничего компилировать, да и отлаживать быстро можно прямо в любимом браузере

Ссылка на комментарий

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

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