携帯電話、タブレットの判定にピクセルではなくインチを使う

色々な案件に関わっていると、スマートフォンなのかタブレットなのかの判定をするためにピクセルを使用しているソースを見ることが多くあります。

幅、高さのそれぞれのピクセル数がある値を超えたらタブレットと判定する。


これはだめですよね

HTC j butterfly  はタブレットと判定されることが多くあります。




ディスプレイは約5インチ
w x h : 1080px x 1920px

5インチなので画面サイズが大きいということでタブレットという判定でもいいかもしれない・・・と思ったりしますが7インチ以上をタブレットと判定したい。。。




ピクセル数は画面のサイズ(インチ)とは違います。1080px x 1920px は5インチであるとは限りません。

 
i9220++ スマートフォン Android 4.0 3G GPS 5.2 インチ800万画素携帯(ブラック)

5.2インチ 画面解像度:960 x 540 pixels QHD screen


HTC j butterfly よりも画面サイズ(インチ)は大きいけれど、ピクセル数は少なくなってます。


ピクセル数で判定するのではなく、インチで判定したほうが正確ですね。



プログラムで画面サイズ(インチ)を計算してみましょう。

  1. ディスプレイ情報を取得する
  2. ピクセル数(width, height)を取得する
  3. dpi (xdpi, ydpi) を取得する
    1. 1インチあたりのピクセル数(dot per inch なのでドット数?)
  4. インチ(width, height) を計算する
  5. 画面サイズ(インチ)を計算する

こんな流れになります。他に簡単に取得できる方法があれば教えていただけるとうれしいです。

Activity#onCreateに書きました

// ディスプレイ情報を取得する
final DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

// ピクセル数(width, height)を取得する
final int widthPx = metrics.widthPixels;
final int heightPx = metrics.heightPixels;

// dpi (xdpi, ydpi) を取得する
final float xdpi = metrics.xdpi;
final float ydpi = metrics.ydpi;

// インチ(width, height) を計算する
final float widthIn = widthPx / xdpi;
final float heightIn = heightPx / ydpi;

// 画面サイズ(インチ)を計算する
final double in = Math.sqrt(widthIn * widthIn + heightIn * heightIn);

Log.d("inch", String.valueOf(in));

if (6 < in) {
    Log.d("display", "tablet");
} else {
    Log.d("display", "smartphone");
}


01-13 08:48:55.838: D/inch(22942): 4.952029711805207
01-13 08:48:55.838: D/display(22942): smartphone

HTC j butterflya で実行したら 4.952... インチという結果が得られました。約5インチ


画面サイズは対角線の長さのことです。
三角形の斜辺を求めるということで画面サイズを計算しました。

斜辺  = √( 底辺^2 + 高さ^2) で求められます。
ルートの計算は Math#sqrt() を使用しました。






関連記事)
ピクセルからdipに変換する

0 件のコメント:

コメントを投稿