-
Постов
1 204 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Весь контент Rusland
-
Andrey Efimov, ваше сообщение отвечает на мой предыдущий вопрос! Спасибо... видимо я там что-то не так делаю, буду смотреть. А вот по поводу приостановки... достаточно и полной остановки сервиса. В указанном примере сервис вызывается, видимо останавливается предыдущий и снова запускается. Не понимаю, как из приложения послать сообщение/команду сервису чтобы он выполнил stopSelf и остановился?
-
Как можно приостановить запущенный сервис из основной программы?
-
Пытаюсь из сервиса выдать уведомление: procedure TAndroidServiceDM.SendNotify(AlertName,AlertBody:String); var Notification: TNotification; begin Notification := NotificationC.CreateNotification; try Notification.Name := AlertName; Notification.AlertBody := AlertBody; Notification.FireDate := Now; NotificationC.ScheduleNotification(Notification); finally Notification.DisposeOf; end; end; ... // пытаюсь вызвать SendNotify('Attention','Тревога'); Вроде не UI использую, но получаю ошибку Segmentation fault 11. Ошибка происходит в System.Android.Notification в строке 208-209 LaunchIntent := TAndroidHelper.Context.getPackageManager().getLaunchIntentForPackage(TAndroidHelper.Context.getPackageName()); AIntent.putExtra(TJNotificationInfo.JavaClass.EXTRA_ACTIVITY_CLASS_NAME, LaunchIntent.getComponent().getClassName()); Снова похоже на обращение к Activity (а может что-то другое). Есть решение как обойти эту проблему? PS. Delphi RX
- 10 ответов
-
- NotificationCenter
- Notification
-
(и ещё 2 )
C тегом:
-
Если знать как определяются координаты (по ЖПС или по сотовым вышкам), то можно выбирать какие координаты использовать, а какие отбрасывать... Узнать тип сенсора можно вот так function getLocationSensorType(const ASensor : TLocationSensor) : String; begin with ASensor do case Sensor.SensorType of TLocationSensorType.GPS: result := 'GPS'; TLocationSensorType.Static: result := 'Static'; TLocationSensorType.Lookup: result := 'Lookup'; TLocationSensorType.Triangulation: result := 'Triangulation'; TLocationSensorType.Broadcast: result := 'Broadcast'; TLocationSensorType.DeadReckoning: result := 'DeadReckoning'; TLocationSensorType.Other: result := 'Other'; else result := 'Unknown'; end; end; procedure TFrmMain.LocationSensorLocationChanged(Sender: TObject; const [Ref] OldLocation, NewLocation: TLocationCoord2D); var Lat,Lon:String; lSensorType : String; begin Lat:=Format('%2.6f',[NewLocation.Latitude]); Lon:=Format('%2.6f',[NewLocation.Longitude]); lSensorType := GetLocationSensorType(LocationSensor); Memo1.Lines.Add('Lat='+Lat+' Lon='+Lon+' lSensorType='+lSensorType); end; однако он мне выдает lSensorType=GPS всегда, даже в случае отключения GPS на устройстве... не знаю почему
-
Эта байда c L начиная с C++Builder2010
-
Есть такая фигня... тоже мешает это... думаю, что в какой-то момент вместо спутника выдаются координаты определенные по базовым станциям сотового оператора. В телефонах/планшетах бывает такая настройка: использовать Только GPS, GPS и сотовые сети. Если бы можно было из программы узнавать откуда пришли координаты на сенсор было бы понятно что с этим делать. Может кто что подскажет?
-
Ставлю breakpoint, дебагер туда не заходит почему-то )
-
Спасибо, я пока режим сна увеличил и контролирую чтобы экран был активным... и даже в таком режиме планшет быстро разряжается, несмотря на то что подключен по USB и получает питание от компьютера (яркость на половину мощности, включен WiFi и GPS). Для меня сейчас крайне важно решить вторую проблему с отсутствием значка программы. Если обычная программа, то значок появляется. Если сервис, то значка нет. Сегодня скомпилировал сервис на телефоне с Android 4.2 - тоже нет значка! Что за глюки?
-
Zuby, можно ли использовать такую конструкцию в сервисе?
-
Всегда так было и всегда так будет
-
Это самое главное
-
Установил приложение на планшет Lenovo Tab2 c Android 5.0.2 и теперь при отправке сообщения и сервиса появляется диалог с предложением открыть в моей программе или ES проводник На что заменить android:mimeType ="text/pas" чтобы гарантированно ни одна программа не могла бы получать сообщение? PS. Похоже ES проводник реагирует на слово text. Нужно его просто заменить (и в коде и в манифесте должно быть одинаково) PPS. Заметил странную вещь, если вызывать из сервиса так TTask.Run(procedure begin try // что-то делаю finally TThread.Synchronize(nil, procedure begin EndTime:='Код ответа'; SendTextViaIntent(EndTime); // сюда не заходит end); end; end); то интент не передается
- 12 ответов
-
Я смотрю тут у многих проблемы с Android 5. Программы которые работали на 4ой версии Андроида не работают должным образом на 5ой версии! Буду писать о всех проблемах с которыми сталкиваюсь с планшетом Lenovo Tab 2 A8-50LC. 1 Проблема. Запустил один и своих проектов - программа просто крэшилась... после 3х попыток программа запустилась, но "помирает" при вызове Edit1.SetFocus 2 Проблема. Устанавливаю программу с сервисом, на планшете не появляется значок запуска программы! То есть если запущенную из студии программу закрыть, то ее никак не перезапустить. 3 Проблема Периодически если планшет в спящем режиме (у меня стоит "Через 2 минуты"), то при компиляции установке программы она не запускается самой студией (в силу наличия проблемы2 запустить программу не получается никак). Как это лечить? PS. Delphi RX Seattle
-
Запустил ради интереса этот пример. Если быстро двигать пальцем влево-вправо, приложение вылетает
-
Сысоев Максим, отсюда? Berlin BigBen мда
-
Ну так как я перепрыгнул с Delphi7-2006, то отличий конечно много . Развиваются - это правда, это хорошо. Но даже мне видно что в лучшей Delphi RX есть куча недоделок. Например, если смотреть форумы, то видно что сервисы под Андроид просили их сделать с 2013 года... спасибо, сделали, но и сейчас не до конца допилены ) Как это называется, когда решением является писать на Java, компилировать классы и подклеивать в свой проект? ) А где виджеты?! Возлагаю большие надежды на следующую версию. Надеюсь все багрепорты поправят особенно с major priority И лучше чтобы не пухли сильно
-
Лучше бы развивали мобильную составляющую
-
Для ищущих ответа: Есть стандартное demo Object Pascal\Mobile Snippets\AndroidIntents\AndroidIntentsGroup.groupproj, в котором показано как из одного приложения передавать данные другому. С помощью этого примера удалось передавать данные из сервиса в основное приложение. В юните основного приложения пишем: uses FMX.Platform, FMX.Platform.Android, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.JNI.Os, Androidapi.Helpers, System.Messaging, Androidapi.JNI.GraphicsContentViewText; private { Private declarations } function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; procedure HandleActivityMessage(const Sender: TObject; const M: TMessage); function HandleIntentAction(const Data: JIntent): Boolean; procedure TForm1.FormCreate(Sender: TObject); var AppEventService: IFMXApplicationEventService; begin ... if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, AppEventService) then AppEventService.SetApplicationEventHandler(HandleAppEvent); // Register the type of intent action that we want to be able to receive. // Note: A corresponding <action> tag must also exist in the <intent-filter> section of AndroidManifest.template.xml. MainActivity.registerIntentAction(TJIntent.JavaClass.ACTION_VIEW); TMessageManager.DefaultManager.SubscribeToMessage(TMessageReceivedNotification, HandleActivityMessage); end; procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage); begin if M is TMessageReceivedNotification then HandleIntentAction(TMessageReceivedNotification(M).Value); end; function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; var StartupIntent: JIntent; begin Result := False; if AAppEvent = TApplicationEvent.BecameActive then begin StartupIntent := MainActivity.getIntent; if StartupIntent <> nil then HandleIntentAction(StartupIntent); end; end; function TForm1.HandleIntentAction(const Data: JIntent): Boolean; var Extras: JBundle; begin Result := False; if Data <> nil then begin Memo1.ClearContent; // записываем в Memo пришедшее сообщение Extras := Data.getExtras; if Extras <> nil then Memo1.Text := JStringToString(Extras.getString(TJIntent.JavaClass.EXTRA_TEXT)); Invalidate; end; end; в AndroidManifest.template.xml добавляем <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="text/pas" /> Отправка сообщения из сервиса делается так: SendTextViaIntent('Hello from service'); procedure TAndroidServiceDM.SendTextViaIntent(const AText: string); var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setType(StringToJString('text/pas')); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); // добавил такой флаг, без него сервис затыкался Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(AText)); if TJContextWrapper.Wrap(System.JavaContext).getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then TJContextWrapper.Wrap(System.JavaContext).startActivity(Intent); // заменил MainActivity на TJContextWrapper.Wrap(System.JavaContext), т.к. это сервис end; Работает исправно, хоть 100%-ую правильность кода не гарантирую Но как передать сообщение из основной программы обратно в сервис я пока не знаю. Также делать хендл внутри сервиса? Попытался просто добавить FMX.Platform, в результате получаю ошибку в FMX.Platform.Android вываливается ошибка об использовании Activity внутри сервиса.
- 12 ответов
-
Обычный TTimer использовать нельзя. Кстати почему нельзя? Почему он обращается к Активити в Androidapi.Helpers? Embarcadero исправьте уже свой баг. Как реализовать timer в сервисе?