1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

benutzen des G Sensors

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von jim, 16.09.2010.

  1. jim, 16.09.2010 #1
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    Hallo liebes Forum,

    ich würde gern die Daten des G Sensors benutzen um mein "Raumschiff" durch bewegen des Telefons fliegen zu lassen. Ich benutze opengl und ein zeichne somit in einer drwa Methode. In der activity welchen diesen View besitz habe ich folgendes implementiert.

    Code:
          manager = (SensorManager) getSystemService(this.SENSOR_SERVICE);
             Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
             manager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_NORMAL);
    
    
        private SensorEventListener listener = new SensorEventListener() {
        
        
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER) {
                float x = event.values[0];
                float y = event.values[1];
                float z = event.values[2];
           
            
            Log.i(Float.toString(x),Float.toString(y));
            
            }
    
            
        };
    
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub
            
    
        }
            
        };
    
    könnte mir da jemand weiterhelfen? irgendwie bekomm ich nie werte und leider finde ich kaum beispiele.. . Links sind willkommen und Hinweise natürlich auch.

    LG Marcel
     
  2. BenOtto, 16.09.2010 #2
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Hast du mal einen Breakpoint auf dein onSensorChanged gesetzt?

    Du darfst in der Zeile
    if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER) {
    nicht mit SensorManager.SENSOR_ACCELEROMETER vergleichen sondern mit Sensor.TYPE_ACCELEROMETER, dann sollte das auch funktionieren.

    Die Benutzung von Log.i(String tag, String msg) sieht auch ein bisschen anders aus. Normalerweise sollte der erste Parameter ein Tag sein (Bspw. "Meine App") und der zweite die Werte beinhalten. Dann kannst du den Log im DDMS nach "Meine App" filtern und siehtst nur deine Ausgaben.
     
    Zuletzt bearbeitet: 16.09.2010
  3. jim, 16.09.2010 #3
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    Hey, vielen dank für deine Antwort! Ja mit den Logs arbeite ich auch anders wenn es notwenidg ist. ein Test test kann ich dann noch filtern, wenn ich nicht mehr brauche ;-) . (aber du hast natürlich vollkommen recht!) will gerade dein hinweisausprobieren leider springt der debugger die stellen nicht an bzw. es passiert nix. 1. setze Point im Code 2. debug as android application Da müsste doch eigetnlich der Debugger zu mein Breakpoint springen(weis gerade nicht warum er einfach weiter läuft). Ist den mein beispiel eigentlich richtig? wollte es später in die activity implementieren(sprich implements SensorEventListener). weist du was ich beim debuggen falsch mache?sonst funktioniert es eigentlich, habe auch mehrer points gesetzt....
    (ein davon muss er anspringen)
    LG marcel
     
  4. BenOtto, 16.09.2010 #4
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Hast du im application-Tag im Manifest debuggable auf true gesetzt?

    Und wie gesagt, deine IF-Abfrage kann (derzeit, wer weiß ob Konstanten mal geändert werden) nur false ergeben, du vergleichst momentan 1 == 2.
     
    jim bedankt sich.
  5. jim, 16.09.2010 #5
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    Das Debug fehlte in der Manifest... (Danke 1)
    Was ich nicht verstehe ist das ich ja beim sensor sage welchen ich benutzen will
    Code:
     Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    und dessen ID (int) ja eigetnlich beim vergleich benutzt wird
    Code:
     if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER)
    Die Abfrage(If) im Listener, zumindest dachte ich wäre reine formsache, um sicherzustellen welcher sensor das ist(man könnte ja weitere hinzunehmen).
    Ohne if funktioniert es.. . Was ist also an der Ifabfrage falsch wenn ich nur den Lagesensor wissen will . hmm bin mir auch nicht sicher ob ich gyroscope oder accelerometer verwenden muss/will um mein raumschiff durch neigen zu steuern.

    LG Marcel
     
  6. BenOtto, 16.09.2010 #6
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Lies dir nochmal meinen ersten Beitrag durch. Du vergleichst eine Konstante von SensorManager mit einer Konstante von Sensor, das funktioniert nicht. Der Compiler meckert nicht, weil beides int ist.

    Das Gyroskop bestimmt die Lage deines Phones, das Accelerometer die Beschleunigung.
     
    Zuletzt bearbeitet: 16.09.2010
    jim bedankt sich.
  7. jim, 18.09.2010 #7
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    Da alles wunderbar klappt,nochmal vielen Dank!!!! Mein Erstgeborenen habe ich schon einem anderen Forummitglied versprochen aber sollte es noch mehr nachwuchs geben werde ich an dich denken :)


    Danke! LG Jim
     
  8. BenOtto, 20.09.2010 #8
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Das ist nett! Bittschön und danke auch!
     
  9. RaRu, 26.09.2010 #9
    RaRu

    RaRu Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    26.09.2010
    Hallo Zusammen,

    kleine Verständnisfrage:
    ich habe eine Test-App, die die event values
    x = event.values[0];
    y = event.values[1];
    z = event.values[2];
    des Accelerometer Sensors ausgibt.

    Liegt das Handy auf dem Tisch,sind die besagten Values:
    x um 0.16...
    y um 0.51...
    z um 10.92...

    drehe ich das Handy auf die Seite folgt
    ~ -10
    ~ 0
    ~ 0

    Ich hatte bei einem Beschleunigungssensor eher etwas erwartet, wie:
    ziehe ich das Handy ruckartig nach oben (z-achse) bekomme ich kurz einen Ausschlag, der dann wieder verebbt.

    So kläre man mich doch auf :D
     
  10. FelixL, 26.09.2010 #10
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Willkommen im Forum.

    Deine Werte liegen an den physikalischen Hintergründen.
    Die Gravitation ist dummerweise auch eine Beschleunigung. Wenn du Werte von überall null haben willst musst du das Gerät im luftleeren Raum loslassen. Wenn du es einfach so mal hochwirfst und wieder fängst bekommst du während dem freien Flug nahezu null hin.
    Die 10 die du bekommst sollten (denke ich mal) eigentlich 9,81 m/sec² sein.

    Das was du dir so vorstellst bekommst du auch raus, allerdings eben immer überlagert von der Gravitation (solange du dieser nicht freien Lauf lässt ;))
     
    RaRu bedankt sich.
  11. RaRu, 26.09.2010 #11
    RaRu

    RaRu Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    26.09.2010
    Vielen Dank! ;-)
     
  12. FelixL, 26.09.2010 #12
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Immer gerne! :)

    Kannst ja das Handy einfach mal über den Tisch ziehen (ich übernehme keine Verantwortung für Kratzer auf der Rückseite).
    Dann bekommst du genau deinen Ausschlag am Anfang und am Ende.
     
  13. BenOtto, 27.09.2010 #13
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
  14. geminga, 27.09.2010 #14
    geminga

    geminga Android-Lexikon

    Beiträge:
    1,221
    Erhaltene Danke:
    227
    Registriert seit:
    14.12.2009
    Phone:
    Samsung Galaxy S3
    Handy auf ein Blatt Papier legen und damit über den Tisch ziehen. So gibts definitiv keine Kratzer.:thumbsup:
     

Diese Seite empfehlen