• 0
S_007

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

Вопросы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 ответов на этот вопрос

  • 1

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

в программе:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

[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 вообще в сети наверное не одного места не осталось, и все. Не надо ничего компилировать, да и отлаживать быстро можно прямо в любимом браузере

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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