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

Rusland

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

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

  • Посещение

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

    26

Весь контент Rusland

  1. Andrey Efimov, ваше сообщение отвечает на мой предыдущий вопрос! Спасибо... видимо я там что-то не так делаю, буду смотреть. А вот по поводу приостановки... достаточно и полной остановки сервиса. В указанном примере сервис вызывается, видимо останавливается предыдущий и снова запускается. Не понимаю, как из приложения послать сообщение/команду сервису чтобы он выполнил stopSelf и остановился?
  2. Rusland

    GPS

    Если верить сообщению ZuBy, то видимо никак не получить координат "синей точки" из MapView
  3. Как можно приостановить запущенный сервис из основной программы?
  4. Пытаюсь из сервиса выдать уведомление: 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
  5. А что в Android является нативным для набора текста?
  6. Rusland

    GPS

    Я задавал уже этот вопрос на форуме - никто не ответил.
  7. Rusland

    GPS

    Если знать как определяются координаты (по ЖПС или по сотовым вышкам), то можно выбирать какие координаты использовать, а какие отбрасывать... Узнать тип сенсора можно вот так 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 на устройстве... не знаю почему
  8. Rusland

    GPS

    Alexander, похоже на правду, свойство на чтение http://docwiki.embarcadero.com/Libraries/XE8/en/System.Sensors.TLocationSensorType http://docwiki.embarcadero.com/Libraries/XE8/en/System.Sensors.TCustomLocationSensor.SensorType
  9. Rusland

    GPS

    Есть такая фигня... тоже мешает это... думаю, что в какой-то момент вместо спутника выдаются координаты определенные по базовым станциям сотового оператора. В телефонах/планшетах бывает такая настройка: использовать Только GPS, GPS и сотовые сети. Если бы можно было из программы узнавать откуда пришли координаты на сенсор было бы понятно что с этим делать. Может кто что подскажет?
  10. Ставлю breakpoint, дебагер туда не заходит почему-то )
  11. Спасибо, я пока режим сна увеличил и контролирую чтобы экран был активным... и даже в таком режиме планшет быстро разряжается, несмотря на то что подключен по USB и получает питание от компьютера (яркость на половину мощности, включен WiFi и GPS). Для меня сейчас крайне важно решить вторую проблему с отсутствием значка программы. Если обычная программа, то значок появляется. Если сервис, то значка нет. Сегодня скомпилировал сервис на телефоне с Android 4.2 - тоже нет значка! Что за глюки?
  12. Zuby, можно ли использовать такую конструкцию в сервисе?
  13. Всегда так было и всегда так будет
  14. haword, надо чтобы на всех устройствах работало без проблем, а раз они возникают, то надо разобраться в чем дело PS. Кстати, почему-то на планшете в Настройки -> Приложения -> Работающие показывает размер 72Мб, а на телефоне с Android 4.2 показывает 40Мб. По разному считают?
  15. Установил приложение на планшет 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); то интент не передается
  16. Я смотрю тут у многих проблемы с Android 5. Программы которые работали на 4ой версии Андроида не работают должным образом на 5ой версии! Буду писать о всех проблемах с которыми сталкиваюсь с планшетом Lenovo Tab 2 A8-50LC. 1 Проблема. Запустил один и своих проектов - программа просто крэшилась... после 3х попыток программа запустилась, но "помирает" при вызове Edit1.SetFocus 2 Проблема. Устанавливаю программу с сервисом, на планшете не появляется значок запуска программы! То есть если запущенную из студии программу закрыть, то ее никак не перезапустить. 3 Проблема Периодически если планшет в спящем режиме (у меня стоит "Через 2 минуты"), то при компиляции установке программы она не запускается самой студией (в силу наличия проблемы2 запустить программу не получается никак). Как это лечить? PS. Delphi RX Seattle
  17. Сегодня нарвался на эту проблему, когда скомпилировал свой проект на планшете с Андройд 5.0.2
  18. Запустил ради интереса этот пример. Если быстро двигать пальцем влево-вправо, приложение вылетает
  19. Сысоев Максим, отсюда? Berlin BigBen мда
  20. Ну так как я перепрыгнул с Delphi7-2006, то отличий конечно много . Развиваются - это правда, это хорошо. Но даже мне видно что в лучшей Delphi RX есть куча недоделок. Например, если смотреть форумы, то видно что сервисы под Андроид просили их сделать с 2013 года... спасибо, сделали, но и сейчас не до конца допилены ) Как это называется, когда решением является писать на Java, компилировать классы и подклеивать в свой проект? ) А где виджеты?! Возлагаю большие надежды на следующую версию. Надеюсь все багрепорты поправят особенно с major priority И лучше чтобы не пухли сильно
  21. Лучше бы развивали мобильную составляющую
  22. Для ищущих ответа: Есть стандартное 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 внутри сервиса.
  23. Обычный TTimer использовать нельзя. Кстати почему нельзя? Почему он обращается к Активити в Androidapi.Helpers? Embarcadero исправьте уже свой баг. Как реализовать timer в сервисе?
×
×
  • Создать...