2015-07-03 22 views
5

Jeśli użytkownik przewróci telefon, chcę na to zareagować, zatrzymując czytanie tekstu na mowę. Byłaby to fajna funkcja dla mojej aplikacji, ale jak mogę wykryć ten ruch? Nie jestem obeznany z czujnikami ruchu i nie mogłem znaleźć tego konkretnego detektora ruchu w dowolnym miejscu, głównie orientacje ekranu. Dzięki za pomoc!Jak wykryć ruch obrotu w systemie Android?

+0

Tylko myśl: jeśli „oddanie oblicze telefonu w dół” jest OK (w przeciwieństwie do po prostu obracając go w powietrzu), a następnie wykrywa nagłe ściemnienie światła otoczenia może działać ([patrz tutaj] (http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_LIGHT)) Nie wiem, czy jest na to słuchacz. – TripeHound

+0

sprawdzi to później (w poniedziałek), jeśli mogę tego użyć. Dokumentacja mówi, że czujniki otoczenia są znacznie łatwiejsze w użyciu, więc mam nadzieję :) –

Odpowiedz

1

To przykładowe działanie demonstruje, w jaki sposób czujnik grawitacji urządzenia może zostać użyty do wykrycia, kiedy urządzenie jest odwracane. W metodzie onSensorChanged() określenie factor określa, jak należy zakończyć "przewrócenie". Typowy zakres może wynosić od 0,7 do 0,95.

Obsługa czujnika grawitacyjnego została dodana w interfejsie API Androida 9. Nie wszystkie urządzenia mają czujnik grawitacji.

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

dziękuję! Wypróbuję to w poniedziałek, kiedy jestem z powrotem w college'u, robię swoją aplikację jako zadanie. (nie zapomnisz o przyjęciu tego :) –

+0

Czy możesz mi pomóc, jak mogę to wykorzystać (przetestowałem, działa dobrze) w klasie? Chcę go używać w wielu działaniach, więc pomyślałem, że zaimplementuję to wszystko w klasie publicznej, ale mając problemy z jej działaniem, teraz otrzymuję 0 errorst, tylko aplikacja nie uruchamia się na moim telefonie: O –

+0

w rzeczywistości aplikacja nie zaczynanie było z zupełnie innego powodu, po prostu musiałem usunąć go z mojego telefonu i zainstalować go ponownie. –

Powiązane problemy