Перейти к содержанию

Вопросы

Собрал сервис по туториалу



Но к сожалению не работает, может ктонибудь посдказать в чём проблема?
стандартно запускается программа, но после её закрытия в запущенных апликациях сервиса не видать.

По туториалу:
В ивенте сервиса AndroidServiceStartCommand
пишу : Result := TJService.JavaClass.START_STICKY;

При создании формы основной программы:
FService := TLocalServiceConnection.Create;
FService.StartService('RADService');
 
Сервис регистрирую в основной программе как показано в туториале.

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


Ссылка на сообщение

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

  • 0

Попробовал по этому видео сделать сервис.

Так у меня вообще не запускается, пишет:

[PAClient Error] Error: E2312 Unable to execute '"C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\build-tools\22.0.1\Aapt.exe" package -f -M "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\AndroidManifest.xml" -F "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\bin\RADService-unsigned.apk" -I "C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\platforms\android-22\android.jar" -S "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\res" -A "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\assets" "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\library" "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\classes"' (Error 1)

Alexander616, у вас никаких ошибок не выдавало?

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


Ссылка на сообщение
  • 0

Попробовал по этому видео сделать сервис.

Так у меня вообще не запускается, пишет:

[PAClient Error] Error: E2312 Unable to execute '"C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\build-tools\22.0.1\Aapt.exe" package -f -M "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\AndroidManifest.xml" -F "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\bin\RADService-unsigned.apk" -I "C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\platforms\android-22\android.jar" -S "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\res" -A "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\assets" "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\library" "C:\Ru\Test\Android\Services\RADservice\Android\Debug\RADService\classes"' (Error 1)

Alexander616, у вас никаких ошибок не выдавало?

Странно, нет у меня ничего подобного, всё устанавливается/ запускается, помимо самого сервиса

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


Ссылка на сообщение
  • 0

О, оказывается сам сервис был активным, из-за этого он и пытался запуститься на телефоне )

Теперь все отлично. Программа работает и сервис нормально перезапускает, если ее "вырубить".

 

Теперь осталось придумать как им общаться между собой (про intent-ы какие-то пишут) ))

 

Alexander616, может Build сервиса забыли сделать до установки программы на устройство?

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


Ссылка на сообщение
  • -2

А вот этот пример (скачивание картинки через сервис) отказывается нормально работать... в списке работающих приложений вообще не вижу приложения и скачивания не происходит.

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


Ссылка на сообщение
  • 0

ребята скажите как сделать так что бы после перезагрузки телефона сервис дальше работал

допустим запустил я приложение. оно запустило сревис.. я вышел из приложения и смотрю что сервис реальноработает как на видео, но процессо рабочих пишет :0

открываю другие приложения чужие - там всегда висит кроме сервиса хотя бы  1 процесс.

майл агент например: процессов 1, серовосв: 1. и так далее. т.е. везде процесс не закрыт.

 

я выбрал LocalService как на видео. где прочесть что такое IntentLocalService

Отредактировал fsdb

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


Ссылка на сообщение
  • 0

Посмотрел видео.

1. Те. получается, что D 10+ позволяют создавать службы для андроида без дополнительных java файлов?

2. Можно ли обходится без HOST-приложения? Если да, то как запустить сервис?

3. Присоединяюсь к вопросу fsdb: нужны ли какие-тор танцы с бубном, чтобы сервис автоматически запускался при старте ОС или он будет, как в винде, запускаться автоматически без лишних танцев?

4. Разрешено ли сервису использовать Toast?

Спасибо.

 

Видео описано в этой справке

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Creating_Android_Services#Creating_an_Android_Service

Отредактировал x11

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


Ссылка на сообщение
  • 0

Кстати, можно написать просто

TLocalServiceConnection.StartService('ServiceName');

 

т.е. без объявления

Fservice := TLocalServiceConnection.Create;

 

Отредактировал x11

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


Ссылка на сообщение
  • 0
5 часов назад, x11 сказал:

1. Те. получается, что D 10+ позволяют создавать службы для андроида без дополнительных java файлов?

Смотря какой сервис, в Делфи просто автоматизировали процесс как смогли. На самом деле, в итоге, создаются java файлы, потом всё превращается в либу и прикрепляется к основному приложению.

5 часов назад, x11 сказал:

2. Можно ли обходится без HOST-приложения? Если да, то как запустить сервис?

Прям вообще без приложения - нет. (на сколько мне известно)

5 часов назад, x11 сказал:

3. Присоединяюсь к вопросу fsdb: нужны ли какие-тор танцы с бубном, чтобы сервис автоматически запускался при старте ОС или он будет, как в винде, запускаться автоматически без лишних танцев?

Нужны и не малые, если хотите охватить максимум устройств, но такие танцы не зависят от языка.

Начать изучать можно с поиска по форуму. Ещё напомню, что на форуме есть раздел "Статьи и заметки".

5 часов назад, x11 сказал:

4. Разрешено ли сервису использовать Toast?

В теории можно, но либа Ярослава для этого не подойдёт, т.к. в компоненте используются файлы студии, которые не работают в сервисах.

 

 

По поводу умирающего сервиса (после закрытия приложения). Да, есть такой косяк, появился с версии Berlin, в Seattle всё работало.

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


Ссылка на сообщение
  • 0
1 минуту назад, Andrey Efimov сказал:

На самом деле, в итоге, создаются java файлы, потом всё превращается в либу и прикрепляется к основному приложению.

ага, я уже немного исследовал примеры :)

 

3 минуты назад, Andrey Efimov сказал:

Нужны и не малые,

у меня даже стандартный пример из коробки не работает :(

http://fire-monkey.ru/topic/4711-не-запускается-служба/

 

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


Ссылка на сообщение
  • 0
17 минут назад, Andrey Efimov сказал:

теории можно, но либа Ярослава для этого не подойдёт, т.к. в компоненте используются файлы студии, которые не работают в сервисах.

Нет, у меня файл Androidapi.JNI.Toast.pas

Цитата

// Java bridge class imported by hand by Brian Long (http://blong.com)

 

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


Ссылка на сообщение
  • 0

Приветствую. Кто может подсказать в чем дело. 

Программа содержит сервис. Задача чтобы сервис через определённый промежуток слал запросы на сервер и обрабатывал ответ (внутри сервиса создают поток). При перезагрузке телефона нужно чтобы сервис запускался автоматом. При отладке все работает как часы. Если установить программу с apk, при отладке все ок. Все шлёт, перезапускается. Но стоит выложить программу в Google play и установить её оттуда, сервис перестаёт запускаться при запуске программы и запускаться автоматом при перезагрузке. При перезагрузке запускается программа, причём фоном. На экране её нет, но на сервере вижу, что запросы шлёт программа, а не сервис. Причём та же программа установленная с Google play на android 8 работает правильно. А при установке на android 9 (xiaomi) начинаются проблемы. Все разрешения в манифесте прописаны и в настройках телефона тоже. 

Проблема именно после установки с Google play начинается и на android 9. 

Всю голову сломал, не пойму куда копать. 

Проверял программами информерами на телефоне содержит ли моя программа сервис, его название и т д. Все на месте. 

Отредактировал SergB

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


Ссылка на сообщение
  • 0

Отвечу сам ?. Выяснил. Если загружать отдельно пакет для 64 версии, то все работает как надо. А вот если формируем aab, то начинаются такие проблемы. Причем все работает с aab нормально, если приложение не содержит сервиса. По всей видимости или делфа не верно формирует пакет aab для сервиса, либо на гуле при оптимизации происходят какие-то метаморфозы. Теперь другая проблема, как сформировать пакет aab так чтобы все работало?

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


Ссылка на сообщение
  • 0

Ну и по традиции отвечаю опять я ?. Решил я эту проблему.

Я так и не разобрался, где происходит неполадка, либо при формировании aab делфой, либо при формировании установочных файлов при установке с гугла. НО, я поступил следующим образом.

1. Компилируем в делфе отдельно 32 и 64 apk

2. Открываем архиватором apk 64 и копируем из него папку arm64-v8a со всем содержимым куда-нибудь на диск

3. Копируем эту папку arm64-v8a в apk 32.

Итого получаем apk 32 содержащий либы для 32 и 64. (что и нужно гуглу). Но после этого наш файл не подписан. Можно подписать и с компа, но это тот еще геморрой. Я подписывал прямо на телефоне с помощью программы ZipSinger. Может есть и другие, но я делал с ней и все сработало.

После подписания загружаем наш гибридный apk в гугл и все работает без проблем ?.

Ну еще раз скажу, что эта проблема с формированием aab у меня возникла лишь когда я добавил в свое приложение сервис. Если нет сервиса то проблем с aab я не наблюдал.

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


Ссылка на сообщение
  • 0
13 часов назад, SergB сказал:

Ну и по традиции отвечаю опять я ?. Решил я эту проблему.

Я так и не разобрался, где происходит неполадка, либо при формировании aab делфой, либо при формировании установочных файлов при установке с гугла. НО, я поступил следующим образом.

1. Компилируем в делфе отдельно 32 и 64 apk

2. Открываем архиватором apk 64 и копируем из него папку arm64-v8a со всем содержимым куда-нибудь на диск

3. Копируем эту папку arm64-v8a в apk 32.

Итого получаем apk 32 содержащий либы для 32 и 64. (что и нужно гуглу). Но после этого наш файл не подписан. Можно подписать и с компа, но это тот еще геморрой. Я подписывал прямо на телефоне с помощью программы ZipSinger. Может есть и другие, но я делал с ней и все сработало.

После подписания загружаем наш гибридный apk в гугл и все работает без проблем ?.

Ну еще раз скажу, что эта проблема с формированием aab у меня возникла лишь когда я добавил в свое приложение сервис. Если нет сервиса то проблем с aab я не наблюдал.

Тоже заметил, что с aab есть проблемы. Иногда почему-то устанавливается 64 битная версия на 32 битный аппарат, соотвественно дальше сплеша на таких устройствах не идет. Если делать Apk с двумя версиями, то такой проблемы не наблюдается.

Но вышеописанное можно сделать гораздо проще. Надо в деплое 64 битной версии добавить файл  so из 32 битной версии и помещаем его в папку library\lib\armeabi-v7a\ .

Для создания APK из двух версии. сначала компилируем 32 битную версию, потом 64 битную, но в Apk 64 битной версии уже попадет и 32 битная. И заморачиваться с отдельным подписанием не надо будет. Все сделает среда.

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


Ссылка на сообщение

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

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

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

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

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

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

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

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


  • Похожий контент

    • От Losev Andrei
      Приветствую!
      Кто-нибудь пробовал сабж? Есть у меня рабочий проект под Android, который нужно перетащить под iOS. Сразу скажу, что раньше с Apple дело не имел, так что на первый взгляд показалось несколько запутанно, но спустя несколько дней уверен, что практически все сделано верно. А вот результат — ноль. Так что нужна помощь.
      Итак, что есть из ПО/железа:
      Delphi 10.3.3 на Windows 7 Pro; macOS 10.15.1 на VMware workstation Player 15.5.1; Xcode 11.2.1 (SDK iPhoneOS 13.2) / 10.3 (SDK iPhoneOS 12.4); PAServer 20.0 (тот который не ругается на истекший срок сертификата); iPhone 6s с iOS 12.4.1; Что сделано на developer.apple.com:
      Выпущен сертификат iOS Development, установлен в macOS; Зарегистрирован App ID вида ru.domain.* для iOS; iPhone зарегистрирован как device (он доступен в XCode); Создан provisioning profile, тип — iOS development, установлен в Xcode и на телефон; Что имеем в результате: в Xcode 10.3 (выбран командой xcode-select) могу создать тестовый проект, с тем же именем, что в Delphi, и запустить на телефоне, из чего следует, что подтянутый profile и сертификат в порядке;
      В Delphi:
      Build Configurations – Release (Debug тоже пробовал); Target platform – iOS Device 64-bit – iPhoneOS 12.4 – MacOs 10.15 profile; Target — мой iPhone 6s; В Delphi проект успешно собирается, но не деплоится, получаю ошибку: «No provisioning profile found for the selected build configuration». Дополнительно вылезает окно справки «Troubleshooting: Cannot Connect to the MAC», похоже не имеющее отношение к делу.
      Delphi в Options-Deploymet-Provisioning действительно не находит нужный профайл и ничего кроме <Use Environment Option (Auto) > не доступно. В Options-Version Info CFBundleIdentifier выставлен такой же, как в Xcode при успешной сборке проекта (то есть «ru.domain.имя проекта»).
      На стороне Мака в терминале имеем выполнение Paserver-ом набора команд (Paserver запускаю посредством PaServerManager):
      > command_line: "/usr/bin/xcrun" simctl list devices
      > command_line: "/Applications/PAServer-20.0.app/Contents/MacOS/iosinstall" -q -v -t 5
      > command_line: "/Applications/PAServer-20.0.app/Contents/MacOS/iosinstall" -q -v -t 5
      > command_line: "/usr/bin/security" find-identity -v
      > command_line: "/usr/bin/security" find-certificate -p -a -c "iPhone Developer: Andrei Losev (GJ...)"
      > command_line: "/usr/bin/security" cms -D -i "/Users/macuser/Library/MobileDevice/Provisioning Profiles/590086d7-76d7-4f2b-951f-a2dc329823a6.mobileprovision"
      То есть Paserver пытается «подцепить» правильный сертификат и нужный provisioning profile, но по какой-то причине эта попытка не приводит к ожидаемому результату. На самом телефоне (Xcode-Window-Devices-iPhone-View Device Logs) лог не создается. Результат с Xcode 11.2.1 аналогичный.
      Что не так? У меня идеи закончились.
    • От ComAlex
      Здравствуйте, господа программисты!
      Пытаюсь протестировать Android приложение на любом эмуляторе.
      Всегда одна ошибка "Unable to create process: Performing Streamed Install"
      Понимаю, что ссылок много по данной теме в интернете, но ни одна не помогла.
      Использую Embarsadero Delphi 10.3
      При компиляции на реальный телефон всё работает
      При компиляции на эмулятор даже пустого приложения выдается та же ошибка
      "Unable to create process: Performing Streamed Install"
      В чем проблема? Хотя бы в какую сторону копать?
    • От gutalin79
      Почему при добавлении MapView в пример Android Service, приложение перестает работать?
      AndroidSimpleService.zip
       
       
       
      Пример делал по этому видео: 
       
    • От M1shQa
      И снова я к Вам за советом, господа. Задачка: пользователь кидает телефон в карман и в фоновом режиме программа сама проверяет каждые секунд 15 наличие новой строки в стринглисте, который цепляется с файла и пытается отправить http запрос. Как мне до этого подсказали копать надо в сторону сервисов. Что же, начал: создал сервис, прицепил к приложению, кинул на него таймер и http от indy, написал кучу кода. Как итог - сервис виден в процессах но таймер не срабатывает и ничего не происходит (запускаю приложение, что бы запустить сервис, выхожу из него и жду проверяя данные на сервере). Но происходит совсем ничего. Туда ли я вообще полез или это нужно реализовывать как то иначе? Стоит local сервис, может проблема в этом? Ниже в темах писали что таймер не работает или еще что, при компиляции ничего не ругается, хотя условий там море и т.д. Все данные которые мне нужно отправить цепляются из текстовых файлов и далее в TStringList..  Понятное дело что такой сервис будет жрать батарейку и кучу трафика, но они так и так тратятся пользователем в "ручном" режиме
    • От Pax Beach
      Создан проект в RAD Studio 10.1 Berlin (Delphi), в приложении прилинкован сервис. При компиляции проекта в AndroidManifest.xml появляется строчка:
      <service android:exported="true" android:name="com.embarcadero.services.MyService" /> А мне нужна строчка:
      <service android:exported="true" android:name="com.embarcadero.services.MyService" android:label="Этот замечательный сервис создан вручную"/> Ни где не нашел такое свойство. В Project->Options->Version info есть свойство Label только для самого Host приложения.
      Помогите пожалуйста советом.
    • От Pax Beach
      Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса.
      Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp".
      Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества.
      Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools).
       
      uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.  
    • От YuraProff
      Добрый день!
       
      Ситуация следующая есть сервис который работает в фоне. Он каждых 10 секунд обращается на сервер и забирает данные через TidUDPServer. Если устройство разблокировано, то все нормально каждые 10 сек идет обмен данными, если устройство заблокировать через кнопку Power то первые 20 сек все работает нормально, потом просто напросто пакеты начинают ходить каждые 1-2 минуты, иногда дольше иногда быстрее. Предполагаю что когда телефон блокируется он переходит в состояние экономии энергии, но телефонная звонилка нормально живет и остальные приложения тоже, хотя наверно там немного другая организация. 
       
            Вопрос у меня такой: можно ли повысить уровень приоритета сервиса, или еще каким нибудь способом заставить его нормально работать, и не тормозить на токае длительное время. 
       
      Спасибо.
    • От YuraProff
      Добрый день в поиске копался, адекватных ответов не нашел.
      Хотел бы поинтересоватся: есть Android Local Service, есть Multi-Device Application, как с приложения сервису передать параметры?
      Например строку или число.
       
      Спасибо
    • От alexbirukov
      И так, столкнулся с новой проблемой.
       
      Был проект опубликованный ранее. Сейчас делал новую версию в XE8.1 на iOS 8 поколения. Всё замечательно работало на iOS 8.3-8.4. Но при проверке на этой неделе, приложение отклонили, по причине того, что на iOS 9, на которой они проверяли, приложение зависает на Splash скрине и дальше не прогружается. Что очень странно. Приложение простое, при запуске пытается подключить к серверу и получить URL адреса, а дальше воспроизведение потокового аудио.
       
      Вопрос. Кто уже публиковал приложения для iOS после выхода 9 версии? Всё ли нормально? В какой версии студии писали приложение?
       
      Свежая версия студии не подходит, потому, что не работает с Push на Android, как вариант писать под разные платформы на разных студиях, что тоже в плане кроссплатформенности совсем не камильфо.
  • Последние посетители   0 пользователей онлайн

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

×
×
  • Создать...