[Q] TYPE_ORIENTATION i Sensor klassen

Discussion in 'Frågor, support och diskussion' started by Denoud, Sep 8, 2010.

  1. Denoud

    Denoud Youth Droid Medlem

    Joined:
    Aug 9, 2010
    Messages:
    227
    Likes Received:
    10

    MINA ENHETER

    Hej.

    Har en fråga kring android.hardware.Sensor klassen.

    Om jag tittar i http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ORIENTATION

    ...så står det följande:
    public static final int TYPE_ORIENTATION
    This constant i deprecated
    use SensorManager.getOrientation() instead.

    Varför har de tagit bort detta?
    Måste jag nu lyssna på TYPE_ACCELEROMETER och TYPE_MAGNETIC_FIELD, dra det genom getRotationMatrix() och slutligen skicka dem till getOrientation() för att få ut samma sak som TYPE_ORIENTATION?

    Någon som vet, eller vet ett simplare sätt med mindre overhead?

    /D
     
  2. Skywriter

    Skywriter Professional Droid Medlem

    Joined:
    Sep 22, 2009
    Messages:
    2 433
    Likes Received:
    142

    MINA ENHETER

    Jag antar att du vill få en kompassriktning.

    Såhär gjorde jag. Först en sensormanager och registrera en listner:
    Code:
    sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sm.registerListener(sl, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),
    				SENSOR_DELAY_NORMAL, new Handler());
    Det finns en inbyggd sensor listner.

    Code:
    	private final SensorEventListener sl = new SensorEventListener() {
    
    		@Override
    		public void onSensorChanged(SensorEvent event) {
    
    			if (event.sensor.getType() != Sensor.TYPE_ORIENTATION) {
    				return;
    			}
    
    			heading = (int) event.values[0];
    heading är magnetiska riktningen på telefonen.
     
  3. Denoud

    Denoud Youth Droid Medlem

    Joined:
    Aug 9, 2010
    Messages:
    227
    Likes Received:
    10

    MINA ENHETER

    Nja, exakt vad jag är ute efter vet jag inte ;), jag labbar mest, men fattar det som att TYPE_ORIENTATION är en kombination av acceleratorn och magnetometern. Bättre mao..

    Du använder just TYPE_ORIENTATION som jag skrev om, som är "deprecated" (from FroYo eller?), ska mao ej användas längre. Frågan är varför de gjort detta och om tanken är att man ska göra all overhead?
     
  4. Skywriter

    Skywriter Professional Droid Medlem

    Joined:
    Sep 22, 2009
    Messages:
    2 433
    Likes Received:
    142

    MINA ENHETER

    Det funkade iaf i min :) (2.1)

    SensorEventListner är iaf nuvarande metod och det jag gör är att registrera den med TYPE_ORIENTATION. Det kanske bara går att ändra den biten.

    Du får iaf ut all rörelse i telefonen med event.values[]
    # values[0:( azimuth, rotation around the Z axis.
    # values[1:( pitch, rotation around the X axis.
    # values[2:( roll, rotation around the Y axis.

    http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation%28float[],%20float[]%29
    Det verkar som att du får resultatet i radianer med nya metoden. Jag får den i grader med min
     
  5. Antonijo

    Antonijo Infant Droid Medlem

    Joined:
    May 18, 2011
    Messages:
    6
    Likes Received:
    1

    MINA ENHETER

    ja, det verkar som att man ska göra så som du sa med magnetic field och accelerometer och rotationmatrix och gravity. men den deprecatade som är mycket enklare och tar mindre kod funkar ju så jag använder den i ett projekt som jag gör nu.
    i ett tidigare skolprojekt där jag ville vara "ordentlig" körde jag det nya sättet.
    men det gamla funkar ju på allt eftersom android-platformen är bakåtkompatibel för all framtid precis som java.
    undrar varför den e deprecated?