2012-04-12 22 views
6

Usando algún código de this question He configurado algún código para detectar cuando se gira un dispositivo Android. Funciona muy bien para la tableta asus (4.0.3) y dos simuladores (4.0.3 y 2.1), pero para el kindle fire (2.3.4) y droidx (2.3.4) cambia el ancho y la altura.Detectar orientación usando javascript en dispositivos Android

Código:

<script type="text/javascript"> 
    var supportsOrientationChange = "onorientationchange" in window,orientationEvent = supportsOrientationChange ? "orientationchange" : "resize"; 

    window.addEventListener(orientationEvent, function() { 
     alert("The rotation is " + window.orientation + " and the resolution is " + screen.width + " x " + screen.height); 
     modRule(); 
    }, false); 
</script> 

La producción de la tableta ASUS

Sosteniéndolo en lo que parece paisaje:

La rotación es 0 y la resolución es de 1280 x 800

Retrato

La rotación es -90 y la resolución es 800 x 1280

de salida de fuego Kindle

paisaje

La rotación es 90 y la resolución es 600 x 819

Retrato:

La rotación es 0 y la resolución es 1024 x 395

salida de DroidX

paisaje:

la rotación es 90 y la resolución es 320x488

Retrato:

La rotación es 0 y la resolución es de 569x239

¿Hay alguna manera de

a) Hacer que el Javascript detectar si debe utilizar uno de altura en lugar de anchura o ancho en lugar de altura

O

b) ¿Los dispositivos informan los valores correctos para su ancho y alto?

Respuesta

1

Después de buscar por un tiempo más descubrí que esto es un error con el sistema operativo 2.2 y 2.3. Arreglé el error con 2.3.4 al poner este código en mi aplicación.

browser = (WebView)findViewById(R.id.webBrowser); 
browser.setBackgroundColor(Color.BLACK); 
WebSettings webSettings = browser.getSettings(); 
webSettings.setJavaScriptEnabled(true); 
webSettings.setUserAgentString("Android " + android.os.Build.VERSION.SDK);//this is so the JavaScript knows what version of the OS I'm using 

Y a continuación, para detectar si estoy en modo horizontal:

var uagent = navigator.userAgent.toLowerCase(); 
function isLandscape() 
{ 
    var width = screen.width; 
    var height = screen.height; 
    if (isBugged()) 
    { 
     var temp = width; 
     width = height; 
     height = temp; 
    } 
    var landscape = width > height; 
    return landscape; 
} 

function isBugged() 
{ 
    return uagent == "android 10" 
} 

Y si eso no fuera lo suficientemente confuso, cuando el cuerpo inicialmente cargas, está justo sobre si está en modo horizontal o no. Así que tuve que eludir mi propia solución.

<body onload="if(isBugged()){uagent = 'bypass';}/*code that depends on isLandscape()*/;uagent = navigator.userAgent.toLowerCase();"> 

Es un dolor real, mucho más trabajo de lo que debería ser. Especialmente porque funciona en 2.1 pero no en 2.3.4. Realmente frustrante, pero eso es lo que tengo. Por el momento, solo compruebo si hay sdk 10, y pronto agregaré cheques para las otras versiones con errores.

Cuestiones relacionadas