Fel accelerometer värden vid landscape mode

Diskussion i 'Frågor, support och diskussion' startad av esak, 26 apr 2011.

  1. esak

    esak Kid Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    32
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag håller på med ett spel med accelerometer-stöd.
    Det fungerar bra på min HTC Desire, men när jag testar på min Kendo M7 surfplatta så får jag fel värden rapporterade.

    Spelet är i landscape-mode, och det verkar som att Kendo'n tror att den fortfarande är i portrait-mode när den ger sina accelerometer-värden.
    Någon som känner igen detta problem, eller möjligtvis har en idé om hur få det att fungera (om det ens är möjligt)?
     
  2. Adam2

    Adam2 Adult Droid Medlem

    Blev medlem:
    26 jul 2010
    Inlägg:
    732
    Mottagna gillanden:
    55

    MINA ENHETER

    Har du auto-orientation på? Har du operativsystemet låst i portrait kommer den säkerligen rapportera sådana värden även om spelat alltid startar i landscape...
     
  3. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Det där är olika för olika telefoner. Du får helt enkelt kalibrera, spara kalibreringsvärdet och addera/subtrahera på de riktiga värdena från accelerometern varje gång den ska göra någonting.

    Kod:
    
    private float dx;
    private float dy;
    
    // Annat...
    
    public WhatEver() {
        dx = // Värde från preferens.
        dy = // Värde från preferens.
    }
    
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {	
            final float x = event.values[0];
    	final float y = event.values[1];
    					
    	if(object != null) {
    	    object.sensor(x + dx, y + dy);
    	}
    					
        }
    }
     
    Last edited: 26 apr 2011
  4. Skywriter

    Skywriter Professional Droid Medlem

    Blev medlem:
    22 sept 2009
    Inlägg:
    2 433
    Mottagna gillanden:
    142

    MINA ENHETER

  5. esak

    esak Kid Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    32
    Mottagna gillanden:
    0

    MINA ENHETER

    Tack för svaren.
    Jag har låst spelet till landscape-mode i AndroidManifest.xml (android:screenOrientation="landscape").

    Jag läste blog-posten... metoden getRotation() som rekommenderades att använda introducerades först i 2.2 och jag har tänkt supporta 1.5 av Android.

    Jag såg att föregångaren till metoden är getOrientation() så jag testade med följande kod:
    Kod:
    return getWindowManager().getDefaultDisplay().getOrientation();
    //return ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
    
    På HTC Desire rapporterade denna 1 (portrait) och på Kendo surfplattan rapporterade den 0 (unknown).

    Jag testade med denna kod-snutt också:
    Kod:
    return getResources().getConfiguration().orientation;
    
    Denna rapporterade 2 (landscape) på båda enheterna.

    Jag skulle kunna använda den första koden och beroende på det rapporterade värdet (1 eller 0) skulle jag kunna läsa olika accelerometer-värden (y eller x).
    Men detta känns inte helt ok.... hur skulle ni ha gjort?

    EDIT:
    Hittade just denna: http://stackoverflow.com/questions/2795833/check-orientation-on-android-phone
    På den sidan finns en metod (getScreenOrientation) som jag skulle kunna använda istället... Jag skulle då få 1 (portrait) för HTC Desire och 2 (landscape) för Kendo-plattan... det är ett alternativ att istället för att kolla mot 1/0 så kollar jag mot 1/2 från denna metod... tankar om denna approach?
     
    Last edited: 26 apr 2011
  6. nadam

    nadam Youth Droid Medlem

    Blev medlem:
    10 feb 2010
    Inlägg:
    182
    Mottagna gillanden:
    31
    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact

    MINA ENHETER

    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact
    Hur gick det med det här? Fick du till det?

    Jag anpassade just mitt spel Swipe 'n' Roll till tablets, så där kan du se ett exempel på hur man kan göra. Behöver troligtvis justera värden för de olika rotationerna eftersom jag kör appen låst i porträtt.

    De flesta tablets har minst 2.2 så jag använder Display.getRotation() för dessa och antar att enheter med 1.5-2.1 har porträtt som default.