-
Постов
414 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Активность репутации
-
Pax Beach получил реакцию от rareMax в Serial port
Кто-нибудь знал, чтобы сервис автоматически запускался по событию BOOT_COMPLETED, нужно, чтобы сервис был Remote Service?
В этом случае AndroidManifest.xml будет содержать строку <service android:exported="true" android:name="com.embarcadero.services.BootService" />, а это в свою очередь хорошо отразится на успешном запуске вашего сервиса после перезагрузки устройства.
Это была хорошая новость.
Плохая заключается в том, что если сервис уже написан, и вам надо включить его в автозагрузку, придется переписать сервис заново (перенести все написанное из обычного в Remote Service).
Пора делать отдельный топик. Всем благ!
-
Pax Beach получил реакцию от Rusland в Гороскоп на каждый день
Бесплатные все врут. А платные правду говорят. Чтобы судьбу узнать, нужно ручку программиста позолотить. =)
А серьезно, интересно опыт монетизации таких приложений узнать.
Хотя при 5000 скачиваний за полгода трудно наверное что-то внятное понять.
-
-
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 поменять). Только не знаю, с какой версии появилась такая возможность.
-
Pax Beach отреагировална Vitaldj в Гороскоп на каждый день
А много купило приложение? А сколько всего скачало и из них платно/бесплатно ?
-
Pax Beach отреагировална Brovin Yaroslav в TScrollbar размер слайдера(ползунка)
Как это не зависит?
ScrollBar1.ViewportSize := 50; ScrollBar1.Max := 200; В итоге ползунок по ширине равен 1/4 ширины скроллбара.
-
Pax Beach отреагировална dnekrasov в Электросчетчики "Меркурий" - Отправка (получение) данных с IP адреса
Тут всё зависит от устройства. Обычно к таким устройствам идет в комплекте SDK, и напрямую по TCP/IP с ними никто не работает. Чаще всего это набор функций в DLL, иногда набор ActiveX-контролов, один раз видел как устройство определяется как сетевой диск и работа с его памятью идет как обычная работа с файлами. Но, если Вы все-таки хотите с ним работать напрямую - то у Вас, как минимум, должно быть описание протокола обмена данными с этим устройством - а там уже решать что использовать. Если устройство поддерживает HTTP протокол - то использовать какой-либо HTTP клиент (TIdHTTPClient, TNetHTTPClient и т.п.), если нет - что-то типа TIdTCPClient.
-
Pax Beach получил реакцию от Евгений Корепов в Работа со звуком. Запись разговора на телефон
Данная задача реализуется при помощи Android Services и Broadcast Recievers.
Искать можно по ключевым словам "android service audio Recorder" здесь, например вот.
Пожалуйста поделитесь полученным решением с нашим сообществом.
P.S.: здесь я опубликовал свое решения для записи звука микрофона с таймером при запуске сервиса.
-
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.
-
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.
-
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.
-
Pax Beach получил реакцию от Rusland в Работа со звуком. Запись разговора на телефон
Данная задача реализуется при помощи Android Services и Broadcast Recievers.
Искать можно по ключевым словам "android service audio Recorder" здесь, например вот.
Пожалуйста поделитесь полученным решением с нашим сообществом.
P.S.: здесь я опубликовал свое решения для записи звука микрофона с таймером при запуске сервиса.
-
Pax Beach отреагировална Равиль Зарипов (ZuBy) в Application does not support this device
эмм, snapdragon это не интел так что все будет нормально
-
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; -
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)
-
Pax Beach отреагировална Равиль Зарипов (ZuBy) в TNotification с переносом строк
из коробки мультилайн не поддерживается. на fmxexpress есть код для исправления локальных нотификаторов.
Для тех которые генерирует Android, пока нельзя мультилайн сделать
-
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;
-
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; -
Pax Beach получил реакцию от Kitty в TNotification с переносом строк
Не могу пока вспомнить, где находил примеры многострочных уведомлений (Android однозначно поддерживает это),
но я бы переносил строку с символами $0D$0A, а у Вас только \n ($0A).
Подробнее об этом здесь.
-
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;
-
Pax Beach отреагировална Brovin Yaroslav в [Android] Почему не работает лог в сервисе?
Версия Log из FMX работать не будет, так как она построена на FMX сервисах (TPlatformServices), которые в андроид сервисах не работают. Поэтому пользуйтесь версией андроида LOGI, LOGW, LOGE.
-
Pax Beach получил реакцию от Rusland в Таймер в сервисе
Это не хорошее решение, а костыль, но пока решает мою задачу:
Когда нужное мне событие произошло, я просто убираю обработчик таймера
AndroidTimerSetHandler(nil); А когда нужен таймер, снова назначаю обработчик:
AndroidTimerSetHandler(WaitComplete); При этом таймер продолжает работать и занимать процесс, когда он фактически не нужен — это, конечно же, не хорошо.
-
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>
-
Pax Beach отреагировална rareMax в Публикация сообщения в группе ВК
Минус не добавил перед ИД"ом или что там было?
-
Pax Beach отреагировална krapotkin в Электросчетчики "Меркурий" - Отправка (получение) данных с IP адреса
конечно
http://docwiki.embarcadero.com/RADStudio/XE8/en/Using_an_HTTP_Client