Поиск сообщества
Показаны результаты для тегов 'сервис'.
Найдено: 12 результатов
-
Собственно, сабж в заголовке. Как? Пытаюсь использовать SQLite + FDConnection. FDConnection.Params.Database:= TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, 'basename.db'); работает в основной форме, но вешает сервис...
- 15 ответов
-
- sqlite
- база данных
-
(и ещё 1 )
C тегом:
-
Пишут про некие intent, с помощью которых можно наладить "общение" между сервисом и приложением. Расскажите как это делается? Поделитесь кодом, чтобы в голове прояснилось
- 12 ответов
-
Можно ли работать с одной базой одновременно и из программы и из сервиса? PS. Android
-
На основе нескольких тем форума сделал службу перехвата звонков и номера телефона. http://fire-monkey.ru/topic/3878-статьякак-создать-простой-android-broadcast-receiver-how-to-implement-simplest-android-broadcast-receiver-in-delphi/ http://fire-monkey.ru/topic/2386-перехват-события-звонка/ http://fire-monkey.ru/topic/2972-использование-нативных-localbroadcastmanager-и-broadcastreceiver/ Покритикуйте пожалуйста. Уверен, что не всё правильно. Но что до ума не удалось довести, так это то, как правильно останавливать службу и закрывать приложение. Проект (для Токио) приложил теме. Заранее благодарен. BR2.rar
-
Я реализовал пример работы с микрофоном и таймером в 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.
-
Проблема давняя, хочется наконец разобраться с ней. Вот создал тестовый пример, в котором приложение TestPro и локальный Android-сервис к нему TestService2. Запускаю программу, нажимаю кнопку Start Service, сервис стартует (увидеть можно в Настройки -> Приложения -> Работающие). Не закрывая программу, перехожу к другим программам и работаю в них. Лучше всего перейти в какой-нибудь браузер и полазить по вкладкам (это довольно ресурсоемкое приложение). После нескольких минут через диспетчер задач я возвращаюсь в свое приложение и оно начинает загружаться с нуля. То есть система давно прибила программу и она начинает загрузку заново. Так вот программа долго висит на заставке, а потом выходит сообщение что приложение не отвечает! Нажимаем OK. После повторного перезапуска программы происходит тоже самое и лишь на третий раз программа запускается. Как решить эту проблему? Я пробовал убивать сервис var LIntent: JIntent; LIntent := TJIntent.Create; LIntent.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString('com.embarcadero.services.TestService2')); TAndroidHelper.Activity.stopService(LIntent); до строчки Application.Initialize - не помогает. TestService2.zip
-
Пытаюсь из сервиса вывести лог, но в monitor ничего не приходит. Для примера вот тестовый проект Проверьте, как у вас? PS. Из приложения лог приходит нормально
-
Подкинуло начальство задачку, да не простую. Приложение должно в фоне мониторить gps, собирать данные о батарее, логировать и потом сливать на сервер. Все это будет нащадно жрать батарею, понимаю, но начальству нужен именно этот вариант. Перейду к вопросам: 1.Нужно пилить сервис, но исходя из прошлых тем - таймер не работает, слипы не вариант, как сделать так, чтоб сервис просыпался каждые 5 минут/15 минут/ 1 час ? 2.Мониторинг GPS, тут решение вроде нашел в этой ветке для seattle, как лучше всего собирать и хранить данные для отправки? (до этого все сохранял в простых .txt) 3.Работают ли компоненты indy корректно в сервисе? срабатывают ли except'ы и как правильно мониторить подключение к сети? Проблема еще и в том, что программа должна работать более менее стабильно и если опыт написания простых приложений у меня есть, то с сервисами уже пару месяцев не могу подружиться.. Всем бобра!
-
Обычный TTimer использовать нельзя. Кстати почему нельзя? Почему он обращается к Активити в Androidapi.Helpers? Embarcadero исправьте уже свой баг. Как реализовать timer в сервисе?
-
В сервисе сохраняю дату и время вот так: var IniFile: TIniFile; SDT: string; FS: TFormatSettings; begin IniFile := TIniFIle.Create(System.IOUtils.TPath.Combine( System.IOUtils.TPath.GetDocumentsPath, 'D.ini')); try FormatSettings.ShortDateFormat:='yyyy-mm-dd'; FormatSettings.DateSeparator := '-'; FormatSettings.LongTimeFormat := 'hh:nn:ss'; FormatSettings.TimeSeparator := ':'; SDT:=DateTimeToStr(Now()); IniFile.WriteString('SERVER','LastOnline',SDT); finally IniFile.free; end; Получаю 31.05.2016 11:08 Тот же самый код в основном приложении выдает 2016-05-31 11:08 В чем моя ошибка? PS. Что происходит в сервисе дебагером посмотреть не удается, Дельфи просто не реагирует на точки останова
-
Как я могу скрыть/показать клавиатуру под "Android"? Благодарю, Grigore
- 1 ответ
-
- Клавиатура
- IFMXVirtualKeyboardService
- (и ещё 2 )
-
Всем привет. Такой вопрос - как определить, в какой точке находится в настоящее время палец (стилус и т.д.) пользователя на экране?