Einzelnen Beitrag anzeigen

Ydobon

Registriert seit: 3. Mär 2006
261 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Inclinometer3D Tilt-Werte auslesen

  Alt 18. Aug 2017, 18:44
Ähm? Es funktioniert auf meinem Android-Handys, nicht auf meinen Nicht-Android-Handys. Ich dachte, du versuchst es mit einem S7 Edge.

Um Delphi mal halbwegs auszuschalten, wie wäre es etwas Low Löffeliger also direkt mit dem NDK?

Delphi-Quellcode:
uses ..., Androidapi.Looper, Androidapi.Sensor;

var
  SensorManager: PASensorManager;
  ASensor, MSensor: PASensor;
  queue: PASensorEventQueue;

procedure TForm1.Switch1Click(Sender: TObject);
var Looper: PALooper;
begin
  if Timer2.Enabled then
  begin
    Timer2.Enabled:=false;
    ASensorEventQueue_disableSensor(queue, ASensor);
    ASensorEventQueue_disableSensor(queue, MSensor);
    ASensorManager_destroyEventQueue(SensorManager, queue);
  end else
  begin
    sensormanager:=ASensorManager_getInstance;
    MSensor:=ASensorManager_getDefaultSensor(SensorManager, ASENSOR_TYPE_MAGNETIC_FIELD);
    ASensor:=ASensorManager_getDefaultSensor(SensorManager, ASENSOR_TYPE_ACCELEROMETER);
    Looper:=ALooper_forThread;
    if not Assigned(Looper) then Looper:=ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
    queue:=ASensorManager_createEventQueue(SensorManager, Looper, 1, Nil, Nil);
    ASensorEventQueue_enableSensor(queue, MSensor);
    ASensorEventQueue_setEventRate(queue, MSensor, 5000);
    ASensorEventQueue_enableSensor(queue, ASensor);
    ASensorEventQueue_setEventRate(queue, ASensor, 5000);
    Timer2.Enabled:=true;
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var event: ASensorEvent;
begin
  Memo1.Lines.Clear;
  while ASensorEventQueue_getEvents(queue, @event, 1)>0 do
  begin
    if event.__type=ASENSOR_TYPE_MAGNETIC_FIELD then
    begin
      Memo1.Lines.Add('Mag '+FloatToStr(event.magnetic.x));
      Memo1.Lines.Add('Mag '+FloatToStr(event.magnetic.y));
      Memo1.Lines.Add('Mag '+FloatToStr(event.magnetic.z));
    end;
    if event.__type=ASENSOR_TYPE_ACCELEROMETER then
    begin
      Memo1.Lines.Add('Acc '+FloatToStr(event.acceleration.x));
      Memo1.Lines.Add('Acc '+FloatToStr(event.acceleration.y));
      Memo1.Lines.Add('Acc '+FloatToStr(event.acceleration.z));
    end;
  end;
end;
  Mit Zitat antworten Zitat