2012-04-12 22 views
6

this question'dan bazı kodları kullanma Bir Android aygıtın ne zaman döndüğünü saptamak için bir kod ayarladık. Asus tablet (4.0.3) ve iki simülatör (4.0.3 ve 2.1) için harika çalışıyor, ancak kindle yangın (2.3.4) ve droidx (2.3.4) için genişlik ve yükseklik değiştiriyor.Android cihazlarda javascript kullanarak yön saptama

Kodu:

rotasyon 0'dır ve çözünürlük 1280 x 800

geçerli: asus tabletin

den

<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> 

Çıktı manzara gibi göründüğünü Lazerlerinizi

Portre

dönme -90 ve çözünürlük

Yatay

dönüş 90 ve çözünürlüğü 600 x 819

olan Kindle Yangın 800 x 1280

Çıktı

Portre:

dönme 0 ve çözünürlük DroidX 1024 x 395

çıkış

yatay:

dönüş 90 ve çözünürlük 320x488

olduğu

Portre:

rotasyon 0'dır ve çözünürlük

569x239 bir yolu var mı olduğunu ben can

a) yerine genişliğinin yüksekliğine kullanabilir veya yerine yüksekliği

arasında genişliği gerekiyorsa JavaScript algılamak olun

VEYA

b) Cihazlar, genişlik ve yükseklik değerleri için doğru değerleri bildirsin mi?

cevap

1

Bir süre aradıktan sonra, bunun 2.2 ve 2.3 işletim sistemi ile ilgili bir hata olduğunu öğrendim. Bu kodu uygulamaya koyduğumda kodu 2.3.4 ile çözdüm.

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 

Sonra yatay modda olursam tespit etmek için:

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" 
} 

Ve bu yeterince kafa karıştırıcı değildi vücut başlangıçta yükler, buna manzara modunda ise konusunda haklı

veya değil. Bu yüzden kendi çözümümü atlamak zorunda kaldım.

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

Gerçek bir acı, olması gerekenden çok daha fazla iş var. Özellikle 2.1'den beri çalışıyor ama 2.3.4 değil. Gerçekten sinir bozucu, ama sahip olduğum şey bu. Şu anda sadece sdk 10 için kontrol ediyorum, yakında diğer bugged sürümleri kontrol edeceğim.

İlgili konular