Sensor der nur y-achse anspricht ?

A

Android_DEV

Ambitioniertes Mitglied
1
Hallo,

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

Danke im voraus :winki:
 
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 :)
 
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

:)
 
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).
 
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 :)
 
Jo :) man könnte auch einen Ton nehmen, der je nach Stärke der Erschütterung verzerrt, oder lauter wird.
 
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.
 
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
 
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.
 
Danke, klingt ein wenig kompliziert aber ich frage mal Google... ;)
lg
- Android_DEV
 

Ähnliche Themen

M
Antworten
3
Aufrufe
169
moin
M
M
Antworten
2
Aufrufe
631
Mozart40
M
S
Antworten
33
Aufrufe
2.674
Sempervivum
S
Zurück
Oben Unten