![]() |
Delphi-Sensoren-Motionsensor wie aktivieren?
Hallo Leute,
kurz vorab meine Frage: wie aktiviert man den Motionsensor für ein Samsung Galaxy S7 Edge? Hier warum ich diese einstellung suche: Ich schreibe an einer Projektarbeit über Sensoren im Handy und brauche dringend Hilfe! ich versuche gerade (und ich bin natürlich schon viel zu spät dran :oops: ) alle Sensoren, die für die Bewegung eines Objektes wichtig sind, zu bekommen. Habe es so mal auf einem Formular mit ein paar probiert:
Code:
Ich bekomme für diese Befehle einen guten Wert(nicht verwirren lassen von dem vorfaktor und dem round): (dieser Sensor benutzt den Kompass, also magnetischen Nord- und Süpol)
Label1.Text := FloatToStr(360*MotionSensor1.Sensor.accelerationX);
Label2.text := FloatToStr(360*MotionSensor1.Sensor.accelerationY); Label3.text := FloatToStr(360*MotionSensor1.Sensor.accelerationZ); Label4.text := FloatToStr(MotionSensor1.Sensor.AngleAccelX); Label5.text := FloatToStr(MotionSensor1.Sensor.AngleAccelY); Label6.text := FloatToStr(MotionSensor1.Sensor.AngleAccelZ); Label7.text := FloatToStr(MotionSensor1.Sensor.Motion); Label8.text := FloatToStr(MotionSensor1.Sensor.Speed); Label9.Text := IntToStr(round(8*OrientationSensor1.Sensor.HeadingX)); Label10.Text := IntToStr(round(8*OrientationSensor1.Sensor.HeadingY)); Label11.Text := IntToStr(round(8*OrientationSensor1.Sensor.HeadingZ)); Label12.Text := FloatToStr(OrientationSensor1.Sensor.TiltX); Label13.Text := FloatToStr(OrientationSensor1.Sensor.TiltY); Label14.Text := FloatToStr(OrientationSensor1.Sensor.TiltZ); Label15.Text := FloatToStr(OrientationSensor1.Sensor.DistanceX); Label16.Text := FloatToStr(OrientationSensor1.Sensor.DistanceY); Label17.Text := FloatToStr(OrientationSensor1.Sensor.DistanceZ);
Code:
Ich bekomme für diese Befehle 0:
Label9.Text := IntToStr(round(8*OrientationSensor1.Sensor.HeadingX));
Label10.Text := IntToStr(round(8*OrientationSensor1.Sensor.HeadingY)); Label11.Text := IntToStr(round(8*OrientationSensor1.Sensor.HeadingZ));
Code:
Für alles andere bekomme ich "NAN", also die funktionieren eben nicht.
Label1.Text := FloatToStr(360*MotionSensor1.Sensor.accelerationX);
Label2.text := FloatToStr(360*MotionSensor1.Sensor.accelerationY); Label3.text := FloatToStr(360*MotionSensor1.Sensor.accelerationZ); Nun meine Frage: Eigentlich sollte ich mit dem motionsensor (der ja funktioniert) Werte bekommen, aber ich bekomme nur 0 zurück.. Muss ich den erst einschalten? Ich habe gesehen, dass andere Apps von anderen Programmierern ihre Motionsensor programme ebenfalls mit: Label1.Text := FloatToStr(MotionSensor1.Sensor.accelerationX); schreiben, aber diese Apps funktionieren bei mir AUCH nciht.. ich muss diesen Sensor wohl irgendwo aktivieren aber wo? ich besitze ein Samsung Galaxy S7 Edge. Ich würde mich sehr über eine hilfreiche Antowrt freuen:) Edit: die TiltX, TiltY und TiltZ Befehler sollten auch Werte zurückgeben aber da bekomme ich "NAN" zurück also ist anscheinend garnicht erreichbar? Habe mir mal eine App über Sensoren runtergeladen.. eigentlich sollten alle Sensoren funktionsbereit sein.. Auch das hier ![]() funktioniert bei mir nicht.. bekomme 0,0,0,0,0 zurück.. |
AW: Delphi-Sensoren-Motionsensor wie aktivieren?
Gute Frage,
habs gerade gecheckt, bei mir geht auch nur noch der Gyro und der Compass Sensor. Acceleration, Accel3D und Tilt zeigen 0. Bei Galaxy S5 gings noch. Hab noch nicht upgedatet auf Android 7 ... Rollo |
AW: Delphi-Sensoren-Motionsensor wie aktivieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Erinnert mich an meinen Versuch für Delphi ein extra gut mit Sensoren ausgestattetes Smartphone aus Fernost zu benutzen. Die Apps aus dem Play Store funktionierten richtig, aber sobald ich das erste mal mit einer Delphianwendung (einschließlich der Demos) auf das Gerät zugriff, waren die Sensoren weg - auch für die anderen Apps. Selbst nach mehrfachen Neustarts konnten sie danach teilweise nicht mehr verwendet werden. Und das bei beiden Geräten, die ich versucht hatte. Bei einem Markenhandy ist das aber bisher noch nicht passiert. Samsung sollte dann eigentlich keine Probleme mit Delphi habe.
Für den Start müssten die Sensoren die Eigenschaft Active haben. Ich habe mal ein kleines Beispiel angehängt(hauptsächlich von ![]() Ist allerdings auch ein Monument für Embas Faulheit (System.Sensors). Der größte Teil der Abfragen ist daher sinnlos.
Delphi-Quellcode:
function TCustomSensor.GetCustomData(const Data): Variant;
begin Result := Null; end; function TCustomSensor.GetCustomProperty(const Prop): Variant; begin Result := Null; end; function TCustomSensor.GetHasCustomData(const Data): Boolean; begin Result := False; end; function TCustomSensor.GetHasCustomProperty(const Prop): Boolean; begin Result := False; end; function TCustomSensor.GetSensorProperty(Prop: TProperty): string; begin Result := ''; end; |
AW: Delphi-Sensoren-Motionsensor wie aktivieren?
Dankesehr für den Testcode.
Der läuft allerdings auch nicht. Es kommt X,Y,Z immer 0 zurück. Wenn ich in den Android-Testmodus gehe, mit Telefon "*#0*#", dann funktionieren die Accelerometer ebenfalls nicht. X,Z,Z 0,0,0 oder manchmal auch 0,0,90, jedenfalls keine Änderung der Werte. Update: Toll was war das denn ? Habs jetzt neu gebootet, dann kommen die Werte im Phonetest *#0*# und auch in dem Emba SensorInfo Demo. Mit deinem Testcode kommt leider immer noch 0,0,0 vermotlich weil LastValue nicht wirklich gesetzt wird. Ich habe mir die Unterschiede zu SensorInfo noch nicht angeschaut. Rollo |
AW: Delphi-Sensoren-Motionsensor wie aktivieren?
Habe ein klein wenig selber die Lösung gefunden aber nur für mein Gyrometer. das hat mir immer nur 0 zurückgegeben und ich habe es mit dem Code siehe unten gelöst. Habe es noch nich mit tilt getestet und werde dieses wochenende auch leider nicht mehr dazukommen >.< vllt. wollt ihrs ja probieren:) Ich werde es auf jedenfall auch noch probieren:)
Code:
procedure TFormMain.Form3DCreate(Sender: TObject);
var Sensormanager: TSensorManager; Sensors: TSensorArray; Sensor: TCustomSensor; begin //Sphere1.MaterialSource:= Menu.TextureMaterialSource1; Sensormanager := TSensormanager.Current; Sensormanager.Activate; Sensors:= Sensormanager.GetSensorsByCategory(TSensorCategory.Motion); for Sensor in Sensors do if TCustomMotionSensor(Sensor).SensorType = TMotionSensortype.Gyrometer3D then begin FSensor:=TCustomMotionsensor(Sensor); end; FSensor.Start; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz