2011年4月23日土曜日

Android ビルドバージョンで処理を分岐する

Build.VERSION クラスで端末のビルドバージョンを取得することができます。

Build.VERSION.SDK_INT には、フレームワークの SDK バージョンが数値ではいっています。この数値は Build.VERSION_CODES で定数として定義されているので、比較することで任意のビルドバージョンで処理をわけることができます。


if(Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) {

// 2.3.3 向けの処理


} else {

 // 2.3.3 以外向けの処理

}



if(Integer.parseInt(Build.VERSION.SDK) == Build.VERSION_CODES.CUPCAKE) {
// for 1.5
}
else {
switch(Build.VERSION.SDK_INT) {
case Build.VERSION_CODES.DONUT:
// for 1.6
break;
case Build.VERSION_CODES.ECLAIR_MR1:
// for 2.1
break;
case Build.VERSION_CODES.FROYO:
// for 2.2
break;
case Build.VERSION_CODES.GINGERBREAD:
// for 2.3
break;
case Build.VERSION_CODES.GINGERBREAD_MR1:
// for 2.3.3
break;
case Build.VERSION_CODES.HONEYCOMB:
// for 3.0
break;
default:
break;
}
}



・ 主な Build.VERSION_CODES の定数

 CUPCAKE
   May 2009: Android 1.5

 DONUT
   September 2009: Android 1.6

 ECLAIR
   November 2009: Android 2.0

 ECLAIR_0_1
   December 2009: Android 2.0.1

 ECLAIR_MR1
   January 2010: Android 2.1

 FROYO
   June 2010: Android 2.2

 GINGERBREAD
   November 2010: Android 2.3

 GINGERBREAD_MR1
   Almost newest version of Android, version 2.3.3

 HONEYCOMB
   Newest version of Android, version 3.0


# Build.VERSION.SDK に数字以外の文字列が入ると
# NumberFormatException になります。
# 安全なコードにしたいなら、try-catch するか、
# if(Build.VERSION.SDK.equals(String.valueOf(Build.VERSION_CODES.CUPCAKE)))
# なのかなぁ。
# ちなみに、Android Developers Blog: How to have your (Cup)cake and eat it too
# では、parseInt() 使ってました。

  

0 件のコメント:

コメントを投稿