-
Постов
1 204 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Весь контент Rusland
-
Можно какой-нибудь пример для ясности?
-
У меня частые проблемы с дебагом сервиса (впрочем как и потоков). Какое-то время breakpoint-ы срабатывают, но через некоторое время я не могу попасть внутрь сервиса - дебаг начинает игнорировать точки останова, что я расставляю внутри сервиса. Например, ставлю breakpoint: function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Log('DDD1 service started',[]); // сюда Result := TJService.JavaClass.START_STICKY; end; при вызове сервиса студия (в режиме дебага) зависает и через пару минут выдает: (программа на устройстве естественно тоже зависает и через какое-то время пишет Приложение не отвечает. Закрыть его?) Я пробовал делать Clean/Build сервиса (удалял папкe Android), пробовал удалять из программы сервис и добавлять его заново. Это не помогает. Надоело каждый раз собирать проект заново! Кстати, при установке программы с сервисом Android каждый раз выдает мне предупреждение: Я нажимаю всегда Отклонить - пока не нажмешь, студия висит ждет разрешения на запуск приложения. Что это за сообщение?
-
YuraProff, попробуйте создать новый проект, добавить к нему новый сервис, прописать вызов как я написал в предыдущем сообщении и поставить breakpoint на строке if Length(LData) = 2 then
-
YuraProff, сам пример DownloadServiceDemo у меня тоже не работает, но в нем есть то что в вам нужно - вызов сервиса делается не стандартным способом типа: TLocalServiceConnection.StartService('DownloadService'); а вот так: procedure TForm1.Button1Click(Sender: TObject); var LIntentService: TIntentServiceHelper; LURL: string; LFilename: string; begin LURL := Edit1.Text; LFilename := Edit1.Text.Substring(Edit1.Text.LastIndexOf('/') +1); LIntentService := TIntentServiceHelper.Create('DownloadService', 0, LURL + '|' + LFilename); TAndroidHelper.Activity.startService(LIntentService.Intent); end; то есть мы не просто вызываем сервис, но и передаем параметры через Intent. В сервисе принимаем и разбираем строку: LTIntentService := TIntentServiceHelper.Create(Intent); LData := LTIntentService.Data.Split([Char('|')]); if Length(LData) = 2 then begin URL := LData[0]; LFileName := LData[1];
-
Ответ со Stackoverflow действительно помог! Из папки source/fmx берем FMX.Platform.Android.pas кладем в папку с проектом. Меняем в нем следующие процедуры: procedure TPlatformAndroid.RunOnUIThread(Proc: TThreadProcedure); begin //MainActivity.runOnUiThread(TSimpleProcedureRunner.Create(Proc)); CallInUIThread( procedure() begin Proc; end); end; procedure TPlatformAndroid.SynchronizeOnUIThread(Proc: TThreadProcedure); //var // Runner: TSimpleProcedureRunner; begin // CallInUIThread( // procedure() // begin // Runner := TSimpleProcedureRunner.Create(Proc); // MainActivity.runOnUiThread(Runner); // Runner.Event.WaitFor; // end); CallInUIThreadAndWaitFinishing( procedure() begin Proc; end); end; procedure TPlatformAndroid.SetClipboard(Value: TValue); //var // Setter: TClipboardSetter; //begin // Setter := TClipboardSetter.Create(Value.ToString); // TAndroidHelper.Activity.runOnUiThread(Setter); // Setter.Done.WaitFor(INFINITE); var Setter: TClipboardSetter; begin Setter := TClipboardSetter.Create(Value.ToString); CallInUIThread( procedure() begin SharedActivity.runOnUiThread(Setter); end); Setter.Done.WaitFor(INFINITE); end; function TPlatformAndroid.GetClipboard: TValue; //var // Getter: TClipboardGetter; //begin // Getter := TClipboardGetter.Create; // TAndroidHelper.Activity.runOnUiThread(Getter); // Getter.Done.WaitFor(INFINITE); // Result := Getter.Value; var Getter: TClipboardGetter; begin Getter := TClipboardGetter.Create; CallInUIThread( procedure() begin SharedActivity.runOnUiThread(Getter); end); Getter.Done.WaitFor(INFINITE); Result := Getter.Value; end; Запускаем и при нажатии на Edit или Memo клавиатура нормально появляется. PS. Надеюсь Embarcadero исправит эту проблему в новой версии. Да, помогло Видимо словить такой глюк могут аппараты Lenovo - что-то в их виртуальной клавиатуре не как у всех PS. Вопрос Бровину Ярославу: Будет ли исправлен Androidapi.Helpers.pas? Постоянно с ним какие-нибудь проблемы. В сервисах его даже подключать опасно, обязательно вылезают ошибки касающиеся TAndroidHelper.Activity С уважением, ... дата... подпись
-
c_breaker, спасибо за пример. Здесь еще одно демо проигрывания звуковых файлов.
-
umkes, не знаю одно и то же ли мы видели... Вот этот япона-сайт... там в uses используется android.app.AlarmManager, но где его взять не говорится. PS. сайт китайский оказывается )
-
Ярослав 2 года назад обещал разобраться и рассказать про него... вот сидим ждем А если серьезно, то это очень интересная тема, поиски в интернете не привели ни к чему (кроме какого-то японского недоделанного кода)
-
На NetHTTPClient пытаюсь назначить обработчик OnValidateServerCertificate: type TFrmMain = class(TForm) ... procedure OnAuthEvent(const Sender: TObject; AnAuthTarget: TAuthTargetType; const ARealm, AURL: string; var AUserName, APassword: string; var AbortAuth: Boolean; var Persistence: TAuthPersistenceType); procedure OnValidateServerCertificate(const Sender: TObject; const ARequest: TURLRequest; const [Ref] Certificate: TCertificate; var Accepted: Boolean); function TFrmMain.GetResponse2(aURL: string): TResponser; var Ss: TStringStream; NetHTTPClient2:TNetHTTPClient; Respon: IHTTPResponse; begin try NetHTTPClient2:=TNetHTTPClient.Create(nil); NetHTTPClient2.OnAuthEvent:=OnAuthEvent; NetHTTPClient2.OnValidateServerCertificate:=OnValidateServerCertificat; // ошибка компиляции ... with NetHTTPClient2 do begin Ss:=TStringStream.Create('', TEncoding.UTF8); Respon:=Get(aURL,ss); end; finally NetHTTPClient2.Free; end; end; procedure TFrmMain.OnValidateServerCertificate( const Sender: TObject; const ARequest: TURLRequest; const [Ref] Certificate: TCertificate; var Accepted: Boolean); begin Accepted:=true; end; Получаю ошибку: Incompatible types: 'Parameter lists differ' Как правильно сделать?
-
Подозреваю что проблема в использовании Andropidapi.Helpers в сервисе. (Багрепорт) Можно как-то от нее избавиться? Сейчас она нужна для функции StringToJString. Intent.setType(StringToJString('text/pas')); Можно ли чем-то заменить? PS. Изменения в Andropidapi.Helpers согласно багрепорту не помогли
- 10 ответов
-
- NotificationCenter
- Notification
-
(и ещё 2 )
C тегом:
-
Я менял ссылку, на проверенную, все равно отказывается скачивать. Так, создал проект с нуля, подцепил ту же процедуру и она работает, уведомление в шторку приходит... видимо в старом проекте что-то используется что мешает работе... воспроизвести ошибку не удается. Стоп, опять проявилась болезнь... В общем это происходит после того как я добавляю в программе в AndroidManifest.template.xml: для общения через Intent. Проект приложил, проверьте пожалуйста. NotificationAppService.zip
- 10 ответов
-
- NotificationCenter
- Notification
-
(и ещё 2 )
C тегом:
-
Кстати, в последнее время у меня не работает стандартный пример DownloadServiceDemo (а может и никогда не работал). Возможно эти два случая как-то связаны.
- 10 ответов
-
- NotificationCenter
- Notification
-
(и ещё 2 )
C тегом:
-
Cтандартный пример \Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidNotificationServiceDemo\NotificationServiceDemo.groupproj не содержит никаких интент (ZuBy, где вы их там увидели?), здесь простейший код: function TNotificationServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin LaunchNotification; JavaService.stopSelf; Result := TJService.JavaClass.START_STICKY; end; procedure TNotificationServiceDM.LaunchNotification; var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'ServiceNotification'; MyNotification.Title := 'Android Service Notification'; MyNotification.AlertBody := 'RAD Studio 10 Seattle'; MyNotification.FireDate := IncSecond(Now, 8); NotificationCenter1.ScheduleNotification(MyNotification); // Segmentation Fault 11 finally MyNotification.Free; end; end; и он у меня РАБОТАЕТ. Но как только я переношу процедуру в свой проект, то на строке NotificationCenter1.ScheduleNotification(MyNotification); вылетает Segmentation Fault 11. Сейчас пересоздам пустой проект, начну наполнять его тем же что есть в моем изначальном проекте и постараюсь воспроизвести ошибку.
- 10 ответов
-
- NotificationCenter
- Notification
-
(и ещё 2 )
C тегом:
-
ZuBy, я уже слышал это от вас раза три. Покажите пожалуйста как из приложения через Intent отправить сообщение в сервис (обратно я уже умею). Ответьте пожалуйста по существу в эту тему. Заранее благодарен