Sensor der nur y-achse anspricht ?

  • 9 Antworten
  • Neuester Beitrag
Diskutiere Sensor der nur y-achse anspricht ? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
A

Android_DEV

Ambitioniertes Mitglied
Hallo,

weiß jemand wie man den displayReading.Text bzw die values ändern muss, damit nur die y-Achse "angesprochen" wird ?

Danke im voraus :winki:
 
ui_3k1

ui_3k1

Gesperrt

Hey,

eigentlich müsstest du doch am besten wissen, was du mit deiner eigenen Variablen machst, die du in der Main initialisierst. :D
Code:
public class MainActivity extends ActionBarActivity implements SensorEventListener {
 
    Sensor sensor;
    private SensorManager sm;
     TextView displayReading;
    MediaPlayer mPlayer;
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         sm = (SensorManager)getSystemService(SENSOR_SERVICE) ;
        sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMET  ER);
        sm.registerListener(this,sensor, SensorManager.SENSOR_DELAY_NORMAL);
        displayReading=(TextView) findViewById(R.id.display_reading);[COLOR=Red] [SIZE=3][B]<--- HERE WE GO[/B][/SIZE][/COLOR] :)
        mPlayer = MediaPlayer.create(this, R.raw.sound);
 
    }
Aus der Ferne kann ich dir leider nicht genau sagen was den Fehler verursacht - aber vermutlich ist es ein ungecasteter Datentyp, den du versuchst auf einem TextView (nimmt Strings entgegen) auszugeben.

Beispiel:
double dLong = location.getLongitude(); <- Datentyp double
String sLongitude = Double.toString(dLong); <- cast in einen String / sLongitude (neu angelegt) ist ein String / dLong ist immer noch ein double

in deinem Fall kannst du dann schreiben:
TextView -> setzte den Text => von Variable ABER den String
Code:
displayReading.setText(sLongitude); <- sLongitude ist vom Typ String

Um die Logik des Sensor-Listeners zu implementieren empfehle ich dir mehrere Schritte zu machen - zB:

Code:
// SENSOR-EINSTELLUNGEN
            float x = event.values[0];
            float y = event.values[1];
            float z = event.values[2];
dann mit diesen Werten weiterarbeiten... (siehe oben) ;)

PS: Kopf nicht hängen lassen, das wird schon :)
 
A

Android_DEV

Ambitioniertes Mitglied
Der Sensor nimmt doch Bewegungen in jeweils zwei Richtungen pro Achse wahr.
Oder?
Soweit ich weiß gibt es hier in meinem Fall y+(nach unten) und y- (nach oben).
Muss ich dann einen zweiten Sensor-Listener einrichten?

Vielen Dank für deine Bemühungen,

-Android_DEV

:)
 
ui_3k1

ui_3k1

Gesperrt

Sehr gut, man merkt du hast dich mit der Materie beschäftigt :)
Zwei listener brauchst du nicht mal (vielleicht würden die sich sogar stören).
Ist viel einfacher.
Du kannst die Variable, die du mit dem Sensor listener ausliest, einfach mal minus eins multiplizieren, wenn sie kleiner ist als 0. Dann brauchst du dir um negative Werte keine Gedanken machen.
So fängst du den Fall der negativen Beschleunigung sehr sicher und Ressourcen sparend ab.
Letzten Endes wird sowieso nur auf einen einzigen Maximalwert geprüft (nur wenn du für Beschleunigung und Bremsung zwei verschiedene Werte bräuchtest wäre das nicht so einfach möglich).
 
A

Android_DEV

Ambitioniertes Mitglied
Danke,
das würde ja bedeuten, dass ich für y+ und y- jeweils eine andere mp3 Datei verwenden könnte. :D

Ich probier´ mal weiter !

mfg

Android_DEV :)
 
ui_3k1

ui_3k1

Gesperrt

Jo :) man könnte auch einen Ton nehmen, der je nach Stärke der Erschütterung verzerrt, oder lauter wird.
 
ui_3k1

ui_3k1

Gesperrt

Hallo,

aktuell sieht deine Logik zum Sensor ja wie folgt aus:

Code:
@Override
public void onSensorChanged(SensorEvent sensorEvent)
{
    displayReading.setText("X" + sensorEvent.values[0] + "\nY" + sensorEvent.values[1] + "\nZ" + sensorEvent.values[2]);

    if (sensorEvent.values[0] > 10);

    {
        mPlayer.start();

    }

}
Da du, so wie ich es verstehe nur die Y-Achse ansprechen willst, sollte der Aufruf zur Prüfung sensorEvent.values[1] lauten (jedenfalls sowie ich es aus der Ferne beurteilen kann).
Bekommst du derzeit deine einzelnen Werte auf dem Display angezeigt? Und wenn ja, geben diese Werte auch deine Erwartungen hinsichtlich der von dir getätigten Bewegungen aus?
-> Schüttel das Gerät mal in eine Richtung - was passiert / welche Werte werden generiert und angezeigt?
Solange diese Funktionalität nicht passt, wird es nur sehr schwierig weitere Fehler oder Ursachen für unerwartetes Verhalten zu finden.

An diesem (wichtigen) Punkt kann dir wahrscheinlich keiner helfen, jedenfalls fällt mir keine sinnvolle Möglichkeit ein...

Insgesamt würde sehr wahrscheinlich die von dir gewünschte Funktionalität ein Interface besser bewerkstelligen können (so jedenfalls meine Vermutung) - aber das auch erst NACHDEM du oben beschriebenen "Test" durchgeführt hast.
 
A

Android_DEV

Ambitioniertes Mitglied
Hallo,
Danke erstmal,
Ja ich bekomme die Werte einzeln angezeigt.
Wenn ich das Gerät schüttle verändern sich die Werte nicht viel.
Man kann es zumindest kaum erkennen.

Wenn ich das Gerät in den Landscape-Mode drehe passiert jedoch "sound-Overlapping" .

Ich probier mal weiter

-Android_DEV
 
ui_3k1

ui_3k1

Gesperrt

Okay, also funktioniert es schon mal.
Zum landscape Modus:
kannst ja abfragen, ob das Gerät gedreht wurde und einen Marker setzen. Wenn marker gesetzt, Logik überspringen oder anderes Verhalten auslösen. Oder du schließt in der Manifest den landscape Modus aus.
 
A

Android_DEV

Ambitioniertes Mitglied
Danke, klingt ein wenig kompliziert aber ich frage mal Google... ;)
lg
- Android_DEV
 
Ähnliche Themen - Sensor der nur y-achse anspricht ? Antworten Datum
4