2015-07-03 4 views
5

Wenn der Benutzer das Telefon umdreht, möchte ich darauf reagieren, indem ich meinen Text zum Lesen der Sprache stoppe. Es wäre eine nette Funktion für meine App, aber wie kann ich diese Bewegung erkennen? Ich bin mit Bewegungssensoren nicht wirklich vertraut und ich konnte diesen spezifischen Bewegungshörer nirgendwo finden, meistens nur in Bildschirmausrichtungen. Danke für die Hilfe!Wie erkennen Sie die Umsatzbewegung in Android?

+0

Nur ein Gedanke: Wenn „setzt das Telefon des Gesicht nach unten auf“ OK ist (im Gegensatz zu nur sie über in der Luft drehen), dann eine plötzliche Verdunkelung der Umgebungslichterfassungs funktionieren könnte ([siehe hier] (http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_LIGHT)) Ich weiß nicht, ob es einen Listener dafür gibt. – TripeHound

+0

wird es später (am Montag) überprüfen, wenn ich das verwenden kann. Die Dokumentation sagt Umgebungssensoren sind viel einfacher zu bedienen, so bin ich hoffnungsvoll :) –

Antwort

1

Diese Beispielaktivität zeigt, wie der Schwerkraftsensor eines Geräts verwendet werden kann, um zu erkennen, wenn das Gerät umgedreht wird. In der Methode onSensorChanged() bestimmt der Ausdruck factor, wie vollständig das "Umdrehen" sein muss. Der typische Bereich liegt zwischen 0,7 und 0,95.

Die Unterstützung für Schwerkraftsensor wurde in Android API 9 hinzugefügt. Nicht alle Geräte verfügen über einen Schwerkraftsensor.

public class MainActivity extends AppCompatActivity implements SensorEventListener { 

    private static final String TAG = "Demo"; 

    private SensorManager mSensorManager; 
    private Sensor mGravitySensor; 
    private boolean mFacingDown; 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // nothing 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     final float factor = 0.95F; 

     if (event.sensor == mGravitySensor) { 
      boolean nowDown = event.values[2] < -SensorManager.GRAVITY_EARTH * factor; 
      if (nowDown != mFacingDown) { 
       if (nowDown) { 
        Log.i(TAG, "DOWN"); 
       } else { 
        Log.i(TAG, "UP"); 
       } 
       mFacingDown = nowDown; 
      } 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); 

     if (mGravitySensor == null) { 
      Log.w(TAG, "Device has no gravity sensor"); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (mGravitySensor != null) { 
      mSensorManager.registerListener(this, mGravitySensor, SensorManager.SENSOR_DELAY_NORMAL); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     mSensorManager.unregisterListener(this); 
    } 
} 
+0

danke! Ich werde es am Montag ausprobieren, wenn ich wieder am College bin, mache ich meine App als Aufgabe dort. (Vergiss nicht, es zu akzeptieren :) –

+0

Könntest du mir helfen, wie könnte ich das benutzen (getestet, funktioniert gut) in einer Klasse? Ich möchte es in vielen Aktivitäten verwenden, also dachte ich, dass ich das alles in einer öffentlichen Klasse implementiere, aber Probleme damit es funktioniert, jetzt bekomme ich 0 Fehler, nur die App startet nicht auf meinem Handy: O –

+0

eigentlich die App Nicht aus einem anderen Grund zu starten, ich musste es nur von meinem Telefon löschen und neu installieren. –