2012-04-12 44 views
6

使用this question中的一些代碼我設置了一些代碼來檢測Android設備何時被旋轉。它適用於asus tablet(4.0.3)和兩個模擬器(4.0.3和2.1),但對於點燃(2.3.4)和droidx(2.3.4),它會切換寬度和高度。在Android設備上使用javascript檢測方向

代碼:

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

從華碩平板

輸出保持它是什麼樣子的風景:

旋轉爲0,分辨率爲1280 x 800的

肖像

旋轉爲-90和分辨率是800×1280

從燒火輸出

景觀

旋轉是90和分辨率爲600 * 819

肖像:

旋轉爲0,分辨率爲1024×395

從droidx輸出

景觀:

旋轉是90和分辨率爲320x488

肖像:

旋轉爲0,分辨率爲569x239

有沒有辦法,我可以

a)使JavaScript的檢測是否應該使用,而不是寬度高度或寬度,而不是高度

b)使設備報告寬度和高度的正確值?

回答

1

找了一段時間後我發現這是2.2和2.3操作系統的一個bug。我通過將這些代碼放入我的應用程序來解決了2.3.4的錯誤。

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 

再檢測,如果我在橫向模式是:

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

如果這還不夠混亂,當身體開始加載,這是正確的約,如果它在橫向模式或不。所以我不得不繞過我自己的解決方法。

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

這是一個真正的痛苦,比它應該更多的工作。特別是因爲它工作在2.1,但不是2.3.4。真令人沮喪,但這就是我所擁有的。目前,我只檢查sdk 10,我將盡快爲其他竊聽版本添加檢查。