アプリをマルチスクリーン (フレックス モバイル) にしています。基本的に、タブレットやスマートフォンをいつ扱っているかを知りたいです。そのため、画面サイズをインチで知りたいです。私はこれを Desire HD (4.3 インチ) でテストしています。私の問題: Capabilities.screenDPI を使用すると、エミュレーターは正しい値 (217) を表示しますが、これをデバイスで実行すると、間違った DPI 値 (240) が表示されます。幅と高さは正しいです。そのdpiに基づいて、インチで間違った画面サイズを取得します(3.887 "!= 4.3")。エミュレーターでは、すべて正常に動作します。デバイス エミュレーターは正しい値で構成されていますが、実際のデバイス (エミュレーターなし) で実行した場合にのみ、間違った DPI 値が取得されます。
次のコードで計算しています。
var screenX:Number = stage.stageWidth;
var screenY:Number = stage.stageHeight;
var pixels:Number = (screenX*screenX) + (screenY*screenY);
var screenSize:Number = Math.sqrt(pixels)/Capabilities.screenDPI;
return (screenSize >= 6) ? "tablet" : "phone"
時間を割くために、Desire HD の値を示します。
480 x 800 ピクセル、4.3 インチ (~217 ppi ピクセル密度)
使用される式は単純です ~ ピタゴラス: a2 + b2 = c2 -> sqrt(c)/dpi = 画面サイズ (インチ)。
Adobe に基づいて、DPI または PPI 値は「互換的に」使用できます。(アドビ、ヘルプ)。dpi 値が ppi 値と異なる情報や、flex で ppi プロパティを使用できる可能性がある情報は見つかりませんでした。
したがって、実際のデバイスでは次のようになります。
480 x 800 ピクセル、3.89 インチ (~240 dpi)。
別の注意: flex モバイルには 3 つの既定の定数があることがわかりました。これらのいずれかに直接スローされる可能性がありますか?(私は Capabilities.screenDPI を直接呼び出しているので、そうは思いません)。
DPIClassification.DPI_160
DPIClassification.DPI_240
DPIClassification.DPI_320
私が言いたいのは、(別のレイアウトに切り替えるために) タブレットかスマートフォンかをどのように判断できるかということです。applicationDPI
Samsung Galaxy S3 (1280x720、319 PPI) や Apple iPad 3 (2048×1536、264 PPI) などの新しいデバイスと混同されているため、道をたどることはできません。