• 0
beklexx

TMotionSensor

Вопросы

Здравствуйте.

Темы с данным компонентом ещё нету, а хотелось бы узнать как с ним работать.

 

Хотел сделать что то вроде трекера, снимающего координаты в случае если есть определённое движение и заинтересовался этим компонентом, но не нашёл толковой инфы. Демка по нему под андроидом что то тоже не очень понятна. Не хотелось бы иметь постоянно включённый LocationSensor, ибо думаю аккумулятор спасибо не скажет. 

 

Никто с ним не сталкивался на практике?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 ответов на этот вопрос

  • 0

мы про датчик ускорения?

если вы будете равномерно топать вдоль дорожки с ним ничего не будет происходить, так что приспособить его вместо GPS вряд ли выйдет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вместо GPS не приспособить, интересно совместить...  если телефон не используется, то программа "засыпает", а если сработал этот датчик движения, то просыпается и начинает передавать координаты.

Когда телефон просто лежит на столе LocationSensor продолжает получать данные со спутника. Думаю с помощью MotionSensor можно включать LocationSensor когда он действительно нужен, тем самым экономя заряд батареи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

экономя используя другой сенсор? который постоянно снимает данные? :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

ZuBy, подозреваю, что первый сенсор потребляет больше энергии чем второй :)

 

В стандартном примере есть код:
 
function TfrmAboutSensors.GetInfoAboutMotion(ASensor: TCustomSensor): string;
var
  ls : TCustomMotionSensor;
  LValues : string;
  LProp : TCustomMotionSensor.TProperty;
begin
  LValues := '';
  ls := TCustomMotionSensor(ASensor);
  if not ls.Started then
    ls.Start;
  for LProp in ls.AvailableProperties do
  begin
    case LProp of
      TCustomMotionSensor.TProperty.AccelerationX:
        LValues := LValues + ToFormStr('AccelerationX', ls.AccelerationX);
      TCustomMotionSensor.TProperty.AccelerationY:
        LValues := LValues + ToFormStr('AccelerationY', ls.AccelerationY);
      TCustomMotionSensor.TProperty.AccelerationZ:
        LValues := LValues + ToFormStr('AccelerationZ', ls.AccelerationZ);
      TCustomMotionSensor.TProperty.AngleAccelX:
        LValues := LValues + ToFormStr('AngleAccelX', ls.AngleAccelX);
      TCustomMotionSensor.TProperty.AngleAccelY:
        LValues := LValues + ToFormStr('AngleAccelY', ls.AngleAccelY);
      TCustomMotionSensor.TProperty.AngleAccelZ:
        LValues := LValues + ToFormStr('AngleAccelZ', ls.AngleAccelZ);
      TCustomMotionSensor.TProperty.Motion:
        LValues := LValues + ToFormStr('Motion', ls.Motion);
      TCustomMotionSensor.TProperty.Speed:
        LValues := LValues + ToFormStr('Speed', ls.Speed);
    end;
  end;
  Result := GetFullInfo(
    GetSensorCategoryName(ASensor.Category),
    GetTypeNameMotion(ls.SensorType),
    ls.ClassName,
    LValues
  ) ;
end;

Получаю данные о AccelerationX, AccelerationY, AccelerationZ и больше ничего.

Что нужно чтобы получать данные Motion? В телефоне должен быть специальный датчик движения?

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

эхх... System.Sensors.TCustomMotionSensor.Motion

Platform Support

This property is only supported on Windows.

 

Platform Details

Android

Android provides different types of motion sensors. Each type of sensor supports a different set of properties:

iOS

iOS provides different types of motion sensors. Each type of sensor supports a different set of properties:

Windows

Complete support.

 

инфа... 

http://docwiki.embarcadero.com/Libraries/XE8/en/System.Sensors.TCustomMotionSensor

http://docwiki.appmethod.com/appmethod/1.17/libraries/en/System.Sensors.TCustomMotionSensor.Motion

 

печалька...

Изменено пользователем beklexx

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В принципе - ничего головоломного, на большинстве девайсов с Андроидом пример работает, но...

Samsung S4, версия андроида 5.0 (но по словам народа - ошибка прослеживается и в 4.4, а на некоторых устройствах - начиная с 4.3)...

Итак, после ресета запускаем программу и получаем по всем осям акселерометра нули! Всё, девайс можно ресетить - больше ни одно приложение до ресета нормально не заработает!

Фэйл? Запускаем то-же приложение на S3, планшете или ещё где - всё норм!

Ресет, запуск - глухо: нули!

Ресет, запуск какого-нить приложения, использующего акселерометр: оно работает. Запуск нашего... РАБОТАЕТ!!!

Ресет и наше - глу-хо-та!

 

Бьюсь весь день - идей нету, разве что "С 4.4 версии надо давать некую команду для инициализации глобальной акселя?"

Но датчику поворота экрана, который, по идее, на том-же акселерометре это не мешает-же!?

 

Проблема прослеживается как с МотионСенсором, так и с Гиро и т.д. - впечатление, что нужен им некий животворящий пинок, иначе после запуска от них идут нули...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, TransMatrix сказал:

...

желательно бы указывать версию среды

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 09.08.2016 в 17:11, TransMatrix сказал:

В принципе - ничего головоломного, на большинстве девайсов с Андроидом пример работает, но...

Samsung S4, версия андроида 5.0 (но по словам народа - ошибка прослеживается и в 4.4, а на некоторых устройствах - начиная с 4.3)...

Итак, после ресета запускаем программу и получаем по всем осям акселерометра нули! Всё, девайс можно ресетить - больше ни одно приложение до ресета нормально не заработает!

Фэйл? Запускаем то-же приложение на S3, планшете или ещё где - всё норм!

Ресет, запуск - глухо: нули!

Ресет, запуск какого-нить приложения, использующего акселерометр: оно работает. Запуск нашего... РАБОТАЕТ!!!

Ресет и наше - глу-хо-та!

 

Бьюсь весь день - идей нету, разве что "С 4.4 версии надо давать некую команду для инициализации глобальной акселя?"

Но датчику поворота экрана, который, по идее, на том-же акселерометре это не мешает-же!?

 

Проблема прослеживается как с МотионСенсором, так и с Гиро и т.д. - впечатление, что нужен им некий животворящий пинок, иначе после запуска от них идут нули...

Подтверждаю

Раньше никогда не работал с сенсорами. И вот сразу обнаружил эту неприятную особенность на некоторых телефонах. На Xiaomi Redmi 3S все работает отлично, но на Samsung Galaxy S7 Edge (который по идее супер нафарширован сенсорами) что акселерометр, что гироскоп выдает сплошные нули. 

Другие приложения из Google Play типа "Уровень" или "Компас" работают понятное дело отлично, а собранное в FMX - Нет. (((

По комментарию выше подозреваю что проблема с самсунгами. Но ведь сторонние приложения работают. В чем же может быть причина?

Хотя судя по тому, что это единственная тема на форуме по датчикам движения, подозреваю, что ответ вряд ли получу ))

Но хоть для истории коммент останется

unit uMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms3D, FMX.Forms, FMX.Dialogs, System.Sensors,
  FMX.Controls3D, FMX.Objects3D, FMX.StdCtrls, FMX.Layers3D,
  FMX.MaterialSources, FMX.Types3D, System.Math.Vectors,
  FMX.Controls.Presentation;

type
  TGyroscopeForm = class(TForm3D)
    Rectangle3D1: TRectangle3D;
    Timer1: TTimer;
    LightMaterialSource1: TLightMaterialSource;
    Light1: TLight;
    Layer3D1: TLayer3D;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Form3DCreate(Sender: TObject);
  end;

var
  GyroscopeForm: TGyroscopeForm;
  FSensor1: TCustomOrientationSensor;
  FSensors: TSensorArray;
  FSensorManager: TSensorManager;

implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}

procedure TGyroscopeForm.Form3DCreate(Sender: TObject);
var
  Sensor: TCustomSensor;
begin
  { attempt to get and activate the sensor manager }
  FSensorManager := TSensorManager.Current;
  FSensorManager.Activate;


  FSensors := TSensorManager.Current.GetSensorsByCategory(TSensorCategory.Orientation);


  FSensor1 := nil;
  for Sensor in FSensors do
    if TCustomOrientationSensor(Sensor).SensorType = TOrientationSensorType.Inclinometer3D then
    begin
      FSensor1 := TCustomOrientationSensor(Sensor);
      Break;
    end;

  if not Assigned(FSensor1) then
  begin
    Label1.Text := 'Gyro not found';
    Exit;
  end;

  if not FSensor1.Started then
  begin
    FSensor1.Start;
    Timer1.Enabled := True;
  end;
end;

procedure TGyroscopeForm.Timer1Timer(Sender: TObject);
begin
  { check for sensor assignment }
  if Length(FSensors) > 0 then
    if Assigned(FSensor1) then
    begin


        Rectangle3D1.RotationAngle.X := FSensor1.TiltX;
        Rectangle3D1.RotationAngle.Y := FSensor1.TiltY;
        Rectangle3D1.RotationAngle.Z := FSensor1.TiltZ;

      Label1.Text := Format('Gyro: %3.1f %3.1f %3.1f',[Rectangle3D1.RotationAngle.X,
        Rectangle3D1.RotationAngle.Y,
        Rectangle3D1.RotationAngle.Z]);
    end;

end;

end.

 

Изменено пользователем Alex7wrt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От brunnengi
      Здравствуйте.
      Как отключить клавиатуру, что бы она не вылетала при получении фокуса в полях ввода?
    • От Mohamed BEN AMMAR
      hello 
      i'm using delphi fmx for building android App
      i have this code for Activating The WI-FI icon from android device:
      This could be found here .
      =========== code ==================
      uses
        Androidapi.Helpers,
        Androidapi.JNI.JavaTypes,
        Androidapi.JNI.GraphicsContentViewText,
        Androidapi.JNIBridge,
        Androidapi.JNI.WifiManager;
        procedure SetWifiEnabled (AEnable: Boolean); var   Obj: JObject;   WifiManager: JWifiManager; begin   Obj: = SharedActivityContext.getSystemService (TJContext.JavaClass.WIFI_SERVICE);   if Obj = nil then     Exit;     WifiManager: = TJWifiManager.Wrap ((Obj as ILocalObject) .GetObjectID);   WifiManager.setWifiEnabled (AEnable); end; 
       
       My question is About Activating Android location:
        Is it possible to activate the service location icon from android device
       programatically without using the Location or TLocationSensor component ....?
      however I know exactly that google has been Deactivate this API since android "4" just for security reasons .....
      but i have seen many apps in playstore can activate the service without using 
      this code here ask the user for activate the location manually .... procedure TForm1.GPSSettings; {$IFDEF ANDROID} var Intent: JIntent; {$ENDIF} begin {$IFDEF ANDROID} Intent := TJIntent.Create; Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); {$ENDIF} end; in other versions like lolipopup can show just the Allow Permission system dialog timer ....( Asking the user for Allowing this App to Activate the service location ......) 
      I have an android device with lolipopup version and i try to execute the location EMBARCADERO sample but 
      this one can not activate the service location ICON even  my device show me the Allow permission dialog where i choose yes allow
      with never ASK....
      Finally ,  I like the WI-FI code above .....
      and i'm wondering if someone here can do this task for me (i need a unit as the WI-FI code above which can offer me
      the option to activate the Service Location ICON )
      I'm ready to paid for that task .....
       
      Sincerelly: Brave.
    • От GMX
      Android 6 MIUI
       ни стандартные примеры не работают, ни попытки что-то свое создать... 
      LastDiscoveredDevices - всегда 0, хотя из настроек устройства находятся. 
      unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Bluetooth, System.Bluetooth.Components, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Bluetooth1: TBluetooth; Label1: TLabel; AniIndicator1: TAniIndicator; procedure Button1Click(Sender: TObject); procedure Bluetooth1DiscoverableEnd(const Sender: TObject); procedure Bluetooth1DiscoveryEnd(const Sender: TObject; const ADeviceList: TBluetoothDeviceList); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Bluetooth1DiscoverableEnd(const Sender: TObject); begin Label1.Text := IntToStr(Bluetooth1.LastDiscoveredDevices.Count); end; procedure TForm1.Bluetooth1DiscoveryEnd(const Sender: TObject; const ADeviceList: TBluetoothDeviceList); begin Label1.Text := IntToStr(ADeviceList.Count); AniIndicator1.Enabled :=False; end; procedure TForm1.Button1Click(Sender: TObject); begin Bluetooth1.DiscoverDevices(10000); AniIndicator1.Enabled :=True; end; procedure TForm1.FormCreate(Sender: TObject); begin while not Bluetooth1.Enabled do Bluetooth1.Enabled := True; end; end. В разрешениях bluetooth, bluetooth admin, coarse location, fine location включены... 
    • От Barbanel
      Всем привет!
      Поясните мне плиз, такую вещь как TTouchAnimation, на примере Android.
      Как я это понимаю:
      Есть к примеру некая кнопка, которая имеет несколько состояний, из которых важны: не нажатая и нажатая.
      В момент нажатия, TTouchAnimation пускает расходящийся круг, причем четко из центра нажатия.
      Ок, пусть на самом деле не круг, а картинку, указанную в... собсно, где???
      Как задать эту область, которая должна отображаться как реакция на нажатие?В редакторе среды, у объектов TButtonStyleObject есть свойство TouchAnimation: (TTouchAnimationAdapter), у которого в свою очередь есть свойство Link: (TBitmapLinks), которое как я считал и отвечает за эту область.
      Однако, при клике на это поле ничего не происходит.
      Баг среды, или моя удача???
      Как вы с этим боретесь?
      Других полей, где могли бы быть эти координаты я не нахожу.
      Заранее спасибо!

    • От Yarpda
      Подскажите пожалуйста есть ли какая-то информация по работе с Google календарем из FMX?
      Может быть у кого-то есть практика работы с ним? На форуме информации по этому поводу никакой не нашел.
      Интересует вопрос чтения и создания событий в календаре.
      Заранее благодарю.
    • От Tarik Live
      Здравствуйте! Уже почти неделю пытаюсь завести библиотеку org.eclipse.paho.client.mqttv3-1.2.0 в своём приложении. Я знаю о существовании компонента от TMS, но он не умеет работать в фоновом сервисе.
      Вот код который я использую для тестов:
       
      Стандартная библиотека org.eclipse.paho.client.mqttv3-1.2.0 выпадает в ошибку initializer error сразу на строчке 
      mqtt:=TJMqttClient.JavaClass.init(StringToJString('tcp://m23.cloudmqtt.com:11021'), StringToJString('java')); по логам с телефона стало понятно, что проблема в логах 😐 а конкретно когда библиотека пытается создать логгер выпадает ошибка что не найден файл локализации ru_RU для logcat (сами файлы там вроде как есть). Ладно. Скачал исходники почистил код библиотеки от упоминаний логгера, собрал ииии и ничего. Продвинулся до строчки 
      mqtt.connect(); также пробивал 
      mqtt.connect(mqttconopt); ничего не помагает, получаю ошибку сегментации класса 
      Пока не понятно куда копать дальше? Возможно что не все библиотеки можно использовать в delphi приложениях? 

      P.S Старая версия 1.1.1 тоже не завелась :(
      service test2.rar
    • От Юрий Гусач
      Доброго дня!
      Проясните пожалуйста ситуацию: при запуске программы  под Андроидом на различных устройствах я получаю размеры формы, которые вроде всегда в разы меньше чем максимальное разрешение экрана конкретного устройства. Я пробовал планшеты и разные смартфоны. Написал тестовую прогу, которая выводит СlientScreen и  ClientWidth формы, на которой ничего больше нет. Например для крайне бюджетного смартфона Fly FS-549 получилось 497 х 320, а по паспорту 854x480. Разрешение и так хреновое, а Delphi его еще сильнее уменьшает. -       Почему это происходит и можно ли как то это обойти?
       
       
    • От Андрей Лещинский
      Здравствуйте ребята. С Firemonkey знаком только два дня. Многое уже подчеркнул с данного форума. Спасибо вам. 
      Проблема заключается в том, что у меня sdk для андроид 7 версии. Я собираю apk файл, запускаю его на Андроид 7 и все отлично, но как только я устанавливаю приложение на Андроид например версии 5, то при запуске оно мерцает пару раз и потом отображается отлично. Не подскажите в чем проблема? Я пробовал проект с данного форума, чтобы форма уходила под статусбара. Вот все они и мерцают на Андроид ниже 7, другие не пробовал проекты
      Стаж у меня только 2 дня, скажите в какую сторону смотреть мне далее
    • От gutalin79
      Почему при добавлении MapView в пример Android Service, приложение перестает работать?
      AndroidSimpleService.zip
       
       
       
      Пример делал по этому видео: 
       
    • От Astghik
      Hello !!!
      I want onButtonClick create popup. I use TPopup component. All good, but on android "Back button" click closing forma. But I want close popup (when popup is shown).

       
      //---------------------------------------------------------------------------------
      void __fastcall  btn3PointsClick(TObject *Sender)
      {
          PopUpSettings->IsOpen = true;
          PopUpSettings->PlacementTarget = btn3Points;
          PopUpSettings->BringToFront();
      }
      //-------------------------------------------------------------------------------------
      void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose)
      {
          try {
              if (PopUpSettings->IsOpen == true) {
                  CanClose = false;
              }
              else {
                  CanClose = true;
              }
          } __finally {
              PopUpSettings->IsOpen = false;
          }
      }
      //-------------------------------------------------------------------
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу