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

Pax Beach

Пользователи
  • Постов

    414
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Активность репутации

  1. Like
    Pax Beach получил реакцию от rareMax в Serial port   
    Кто-нибудь знал, чтобы сервис автоматически запускался по событию BOOT_COMPLETED, нужно, чтобы сервис был Remote Service?
    В этом случае AndroidManifest.xml будет содержать строку <service android:exported="true" android:name="com.embarcadero.services.BootService" />, а это в свою очередь хорошо отразится на успешном запуске вашего сервиса после перезагрузки устройства.
    Это была хорошая новость.
    Плохая заключается в том, что если сервис уже написан, и вам надо включить его в автозагрузку, придется переписать сервис заново (перенести все написанное из обычного в Remote Service).
    Пора делать отдельный топик. Всем благ!
     
  2. Like
    Pax Beach получил реакцию от Rusland в Гороскоп на каждый день   
    Бесплатные все врут. А платные правду говорят. Чтобы судьбу узнать, нужно ручку программиста позолотить. =)
    А серьезно, интересно опыт монетизации таких приложений узнать.
    Хотя при 5000 скачиваний за полгода трудно наверное что-то внятное понять.
     
  3. Like
    Pax Beach отреагировална Brovin Yaroslav в Serial port   
    Появилась с версии XE7.
  4. Like
    Pax Beach получил реакцию от Brovin Yaroslav в Serial port   
    Несколько часов не мог понять, при чем тут Java2OP и Classes.dex, пока не прокачал обе темы и не нашел статью «Using a Custom Set of Java Libraries In Your RAD Studio Android Apps».
    За то теперь мой класс BootReceiver (extends BroadcastReceiver) добавляется через Project Manager, и проект компилируется и запускается. Правда при загрузке системы ресивер не отрабатывает — днем разберемся.
    1. Написал JAVA класс.
    2. Скомпилировал в JAR.
    3. Сделал обертку при помощи Java2OP.
    4. Подключил JAR в Project Manager.
    5. Добавил к проекту обертку.
    6. Подшаманил AndroidManifest.template.xml (если это нужно в задаче).
    7. Пожалуйста → компилируй, собирай.
    Это реальный прогресс, по сравнению с ручным формированием DEX (ни Clean не сделать, ни Build Conf поменять). Только не знаю, с какой версии появилась такая возможность.
  5. Like
    Pax Beach отреагировална Vitaldj в Гороскоп на каждый день   
    А много купило приложение? А сколько всего скачало и из них платно/бесплатно ?
  6. Like
    Pax Beach отреагировална Brovin Yaroslav в TScrollbar размер слайдера(ползунка)   
    Как это не зависит?
    ScrollBar1.ViewportSize := 50; ScrollBar1.Max := 200; В итоге ползунок по ширине равен 1/4 ширины скроллбара.
  7. Like
    Pax Beach отреагировална dnekrasov в Электросчетчики "Меркурий" - Отправка (получение) данных с IP адреса   
    Тут всё зависит от устройства. Обычно к таким устройствам идет в комплекте SDK, и напрямую по TCP/IP с ними никто не работает. Чаще всего это набор функций в DLL, иногда набор ActiveX-контролов, один раз видел как устройство определяется как сетевой диск и работа с его памятью идет как обычная работа с файлами. Но, если Вы все-таки хотите с ним работать напрямую - то у Вас, как минимум, должно быть описание протокола обмена данными с этим устройством - а там уже решать что использовать. Если устройство поддерживает HTTP протокол - то использовать какой-либо HTTP клиент (TIdHTTPClient, TNetHTTPClient и т.п.), если нет - что-то типа TIdTCPClient.
  8. Like
    Pax Beach получил реакцию от Евгений Корепов в Работа со звуком. Запись разговора на телефон   
    Данная задача реализуется при помощи Android Services и Broadcast Recievers.
    Искать можно по ключевым словам "android service audio Recorder" здесь, например вот.
    Пожалуйста поделитесь полученным решением с нашим сообществом.
     
    P.S.: здесь я опубликовал свое решения для записи звука микрофона с таймером при запуске сервиса.
  9. Like
    Pax Beach получил реакцию от Вольдемар в Запись и сохранение голоса в течение 10 секунд после запуска Android сервиса (Пример)   
    Я реализовал пример работы с микрофоном и таймером в 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.  
  10. Like
    Pax Beach получил реакцию от Alex7wrt в Запись и сохранение голоса в течение 10 секунд после запуска Android сервиса (Пример)   
    Я реализовал пример работы с микрофоном и таймером в 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.  
  11. Like
    Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Запись и сохранение голоса в течение 10 секунд после запуска Android сервиса (Пример)   
    Я реализовал пример работы с микрофоном и таймером в 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.  
  12. Like
    Pax Beach получил реакцию от Rusland в Работа со звуком. Запись разговора на телефон   
    Данная задача реализуется при помощи Android Services и Broadcast Recievers.
    Искать можно по ключевым словам "android service audio Recorder" здесь, например вот.
    Пожалуйста поделитесь полученным решением с нашим сообществом.
     
    P.S.: здесь я опубликовал свое решения для записи звука микрофона с таймером при запуске сервиса.
  13. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Application does not support this device   
    эмм, snapdragon это не интел так что все будет нормально
  14. Like
    Pax Beach получил реакцию от Ingalime в Одновременное обращение к БД Sqlite из программы и из сервиса   
    Я нашел решение, к сожалению, пока только для работы с UniDAC:
    Обновил UniDAC компоненты для Berlin до последней версии (6.3.12).
    Компоненты TUniConnection и TUniQuery отлично работают с SQLite в Android Service. FireDAC в Android Service пока запустить не удалось, но у меня такой задачи нет.
    В Deployment host приложения добавляю файл базы данных, Remote Path задаю ".\assets\internal\". И спокойно из сервиса получаю к нему доступ. Мой сервис локальный в одном потоке с приложением. Если делать Intent Service или Remote — наверное, придется помещать файл в другой, доступный каталог, или общаться через намерения (Intents).
    Надеюсь мой код будет полезен для вас.
    procedure TDM.conSQLiteBeforeConnect(Sender: TObject); begin {$IF DEFINED(iOS) or DEFINED(ANDROID)} conSQLite.Database := TPath.Combine(TPath.GetDocumentsPath, 'mybase.sqlite'); {$ENDIF} end; procedure TDM.conSQLiteError(Sender: TObject; E: EDAError; var Fail: Boolean); begin Log('--- DB error: %s:', [E.Message]); Fail := False; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Log('+ START with Intent: ' + JStringToString(Intent.getAction.toString), []); if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin try conSQLite.Disconnect; Log('- DB disconnected', []); except on E: Exception do Log('- can not to disconnect DB', [E.Message]); end; Log('... service to be stoped', []); JavaService.stopSelf; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service end else begin Log('... service started', []); try conSQLite.Connect; Log('+ DB connected', []); UniQuery.SQL.Text := 'select count(*) as ALLREC from orders'; UniQuery.Open; if UniQuery.RecordCount > 0 then begin UniQuery.First; Log('... record count: %s', [UniQuery.FieldByName('ALLREC').AsString]); end; UniQuery.Close; except on E: Exception do Log('- can not to connect DB: %s', [E.Message]); end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops end; end;
  15. Like
    Pax Beach отреагировална Евгений Корепов в Прочитать DNS запрос в idUDPServer   
    Все правильно получаете, кодировка тут не при чем. Согласно спецификации "DNS Packet Structure", вы получаете не строку, а пакет который нужно разобрать. К примеру если запрос будет "nslookup www.google.ru 127.0.0.1", то там где вы получаете имя хоста будет строка "''#3'www'#6'google'#2'ru'#0#0#1#0#1".
    Парсинг простейший:
    #3 - означает что далее идут 3 символа хоста 'www' - вот ожидаемые 3 символа #6 - далее идут еще 6 символов хоста 'google' - ага, вот они #2 - ну и еще 2 символа 'ru' - ура, они здесь #0 - конец имени хоста, складываем в кучу, перемежая точками и получаем www.google.ru #0 - дальше у нас служебная информация... #1 #0 #1 Вот как то так.
    P.S. А зачем вам на таком низком уровне работать? Может использовать IdDNSServer : TIdDNSServer ?
    P.P.S. Правильно Memo1.Lines.Add(BytesToString(AData,12)); //(12, а не 13)
  16. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в TNotification с переносом строк   
    из коробки мультилайн не поддерживается. на fmxexpress есть код для исправления локальных нотификаторов.
    Для тех которые генерирует Android, пока нельзя мультилайн сделать
  17. Like
    Pax Beach получил реакцию от Kitty в [Android] Почему не работает лог в сервисе?   
    Мне видится, что твой log будет выводиться только в НЕ режиме отладки.
    Я использую функцию без условий компилятора, и она отлично работает и в приложении, и Android сервисе.
    procedure Log(const Fmt: string; const Params: array of const); var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end;  
  18. Like
    Pax Beach получил реакцию от #WAMACO в Одновременное обращение к БД Sqlite из программы и из сервиса   
    Я нашел решение, к сожалению, пока только для работы с UniDAC:
    Обновил UniDAC компоненты для Berlin до последней версии (6.3.12).
    Компоненты TUniConnection и TUniQuery отлично работают с SQLite в Android Service. FireDAC в Android Service пока запустить не удалось, но у меня такой задачи нет.
    В Deployment host приложения добавляю файл базы данных, Remote Path задаю ".\assets\internal\". И спокойно из сервиса получаю к нему доступ. Мой сервис локальный в одном потоке с приложением. Если делать Intent Service или Remote — наверное, придется помещать файл в другой, доступный каталог, или общаться через намерения (Intents).
    Надеюсь мой код будет полезен для вас.
    procedure TDM.conSQLiteBeforeConnect(Sender: TObject); begin {$IF DEFINED(iOS) or DEFINED(ANDROID)} conSQLite.Database := TPath.Combine(TPath.GetDocumentsPath, 'mybase.sqlite'); {$ENDIF} end; procedure TDM.conSQLiteError(Sender: TObject; E: EDAError; var Fail: Boolean); begin Log('--- DB error: %s:', [E.Message]); Fail := False; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Log('+ START with Intent: ' + JStringToString(Intent.getAction.toString), []); if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin try conSQLite.Disconnect; Log('- DB disconnected', []); except on E: Exception do Log('- can not to disconnect DB', [E.Message]); end; Log('... service to be stoped', []); JavaService.stopSelf; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service end else begin Log('... service started', []); try conSQLite.Connect; Log('+ DB connected', []); UniQuery.SQL.Text := 'select count(*) as ALLREC from orders'; UniQuery.Open; if UniQuery.RecordCount > 0 then begin UniQuery.First; Log('... record count: %s', [UniQuery.FieldByName('ALLREC').AsString]); end; UniQuery.Close; except on E: Exception do Log('- can not to connect DB: %s', [E.Message]); end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops end; end;
  19. Like
    Pax Beach получил реакцию от Kitty в TNotification с переносом строк   
    Не могу пока вспомнить, где находил примеры многострочных уведомлений (Android однозначно поддерживает это),
    но я бы переносил строку с символами $0D$0A, а у Вас только \n ($0A).
    Подробнее об этом здесь.
  20. Like
    Pax Beach получил реакцию от Rusland в [Android] Почему не работает лог в сервисе?   
    Мне видится, что твой log будет выводиться только в НЕ режиме отладки.
    Я использую функцию без условий компилятора, и она отлично работает и в приложении, и Android сервисе.
    procedure Log(const Fmt: string; const Params: array of const); var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end;  
  21. Like
    Pax Beach отреагировална Brovin Yaroslav в [Android] Почему не работает лог в сервисе?   
    Версия Log из FMX работать не будет, так как она построена на FMX сервисах (TPlatformServices), которые в андроид сервисах не работают. Поэтому пользуйтесь версией андроида LOGI, LOGW, LOGE.
  22. Like
    Pax Beach получил реакцию от Rusland в Таймер в сервисе   
    Это не хорошее решение, а костыль, но пока решает мою задачу:
    Когда нужное мне событие произошло, я просто убираю обработчик таймера
    AndroidTimerSetHandler(nil); А когда нужен таймер, снова назначаю обработчик:
    AndroidTimerSetHandler(WaitComplete); При этом таймер продолжает работать и занимать процесс, когда он фактически не нужен — это, конечно же, не хорошо.
     
  23. Like
    Pax Beach отреагировална umkes в мне нужно что бы мой сервис стартовал каждые 10 секунд.   
    package com.TestReceiver; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action != null) if ( action.equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED) || action.equalsIgnoreCase("com.TestReceiver.BootCompletedCustomIntent") ) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.TestReceiver.BootCompletedReceiver"); TestLauncher.setAction("com.TestReceiver.StartServiceIntent"); PendingIntent pintent = PendingIntent.getBroadcast(context, 0, TestLauncher, 0); AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 5000, pintent); } else if (action.equalsIgnoreCase("com.TestReceiver.StartServiceIntent")) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.services.myService"); context.startService(TestLauncher); } } } Вот пример 1 из моих сервисов. Сначала стартует аларм менеджер, который сюда же шлет интенты на старт сервиса "myService".
    В манифесте в ресиверах прописаны эти интенты
    <receiver android:name="com.TestReceiver.BootCompletedReceiver" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="com.TestReceiver.BootCompletedReceiver" /> <action android:name="com.TestReceiver.BootCompletedCustomIntent" /> <action android:name="com.TestReceiver.StartServiceIntent" /> </intent-filter> </receiver>  
  24. Like
    Pax Beach отреагировална rareMax в Публикация сообщения в группе ВК   
    Минус не добавил перед ИД"ом или что там было?
  25. Like
    Pax Beach отреагировална krapotkin в Электросчетчики "Меркурий" - Отправка (получение) данных с IP адреса   
    конечно
    http://docwiki.embarcadero.com/RADStudio/XE8/en/Using_an_HTTP_Client
×
×
  • Создать...