システム情報はBuildクラスを参照します。Build.VERSIONクラスでは、OSバージョンやAPIレベルを取得できます。バージョンによってフィールド(プロパティ)が追加されていたり、フィールドの代わりにメソッドを使うことが推奨されています。手元の端末のバージョンに応じて、使えるフィールドだけ参照すればいいのですがそれでは汎用的ではありません。いつもはプロジェクトの設定はAndroid 2.1以降で使えるようにしていますが、それではAndroid 2.2や4.0で追加されたものが使えませんので、今回はどのバージョンでも動くようにビルドします。
Androidプロジェクトの設定
ビルドターゲットにAndroid 4.0を、最小SDKバージョンには1を指定しています。最小SDKバージョンを指定しないとビルドターゲットで指定したバージョン以降(今回であれば、API Level 14、Android 4.0以降)でしか動かなくなりますのでご注意を。
プロジェクト名: BuildInfoTest1 ビルドターゲット: Android 4.0 アプリケーション名: BuildInfoTest1 パッケージ名: jp.co.triware.samples.BuildInfoTest1 アクティビティーの作成: BuildInfoTest1Activity 最小SDKバージョン: 1
BuildInfoTest1Activity.java
package jp.co.triware.samples.BuildInfoTest1; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.util.Log; public class BuildInfoTest1Activity extends Activity { private static final String TAG = "BuildInfoTest1"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Build Log.d(TAG, "Build.BOARD: " + Build.BOARD); try { Log.d(TAG, "Build.BOOTLOADER: " + Build.BOOTLOADER); // Lv8 } catch (NoSuchFieldError e) { ; } Log.d(TAG, "Build.BRAND: " + Build.BRAND); try { Log.d(TAG, "Build.CPU_ABI: " + Build.CPU_ABI); // Lv4 } catch (NoSuchFieldError e) { ; } try { Log.d(TAG, "Build.CPU_ABI2: " + Build.CPU_ABI2); // Lv8 } catch (NoSuchFieldError e) { ; } Log.d(TAG, "Build.DEVICE: " + Build.DEVICE); try { Log.d(TAG, "Build.DISPLAY: " + Build.DISPLAY); // Lv3 } catch (NoSuchFieldError e) { ; } Log.d(TAG, "Build.FINGERPRINT: " + Build.FINGERPRINT); try { Log.d(TAG, "Build.HARDWARE: " + Build.HARDWARE); // Lv8 } catch (NoSuchFieldError e) { ; } Log.d(TAG, "Build.HOST: " + Build.HOST); Log.d(TAG, "Build.ID: " + Build.ID); try { Log.d(TAG, "Build.MANUFACTURER: " + Build.MANUFACTURER); // Lv4 } catch (NoSuchFieldError e) { ; } Log.d(TAG, "Build.MODEL: " + Build.MODEL); Log.d(TAG, "Build.PRODUCT: " + Build.PRODUCT); try { Log.d(TAG, "Build.RADIO(deprecated): " + Build.RADIO); // Lv8 (-> Lv14: method) } catch (NoSuchFieldError e) { ; } try { Log.d(TAG, "Build.SERIAL: " + Build.SERIAL); // Lv9 } catch (NoSuchFieldError e) { ; } Log.d(TAG, "Build.TAGS: " + Build.TAGS); Log.d(TAG, "Build.TIME(long): " + Build.TIME); Log.d(TAG, "Build.TYPE: " + Build.TYPE); Log.d(TAG, "Build.USER: " + Build.USER); try { Log.d(TAG, "Build.getRadioVersion(): " + Build.getRadioVersion()); // Lv14 } catch (NoSuchMethodError e) { ; } // Build.VERSION try { Log.d(TAG, "Build.VERSION.CODENAME: " + Build.VERSION.CODENAME); // Lv4 } catch (NoSuchFieldError e) { ; } Log.d(TAG, "Build.VERSION.INCREMENTAL: " + Build.VERSION.INCREMENTAL); Log.d(TAG, "Build.VERSION.RELEASE: " + Build.VERSION.RELEASE); Log.d(TAG, "Build.VERSION.SDK(deprecated): " + Build.VERSION.SDK); // (-> Lv4: SDK_INT) try { Log.d(TAG, "Build.VERSION.SDK_INT(int): " + Build.VERSION.SDK_INT); // Lv4 } catch (NoSuchFieldError e) { ; } } }"// Lv4"のようなコメントを付けたところは、"API Level 4で追加"されたフィールドです。
"RADIO"はAPI Level 8で追加されましたが、API Level 14でメソッド(getRadioVersion())に変更されました。
対応していないバージョンでフィールドを参照したりメソッドを実行すると例外が発生しますので、try-catchで対応します。
"SDK"はAPI Level 4で追加された"SDK_INT"に変更されました。どちらも値は数字です(SDKはString型で、SDK_INTはint型で持っています)。
実行結果
Build.BOARD: N-04C Build.BOOTLOADER: 0 Build.BRAND: DOCOMO Build.CPU_ABI: armeabi-v7a Build.CPU_ABI2: armeabi Build.DEVICE: N-04C Build.DISPLAY: GINGERBREAD Build.FINGERPRINT: DOCOMO/N-04C/N-04C:2.3.3/A1030401/eng.20111117.100533:user/release-keys Build.HARDWARE: n-04c Build.HOST: NCmobile Build.ID: A1030401 Build.MANUFACTURER: NEC Build.MODEL: N-04C Build.PRODUCT: N-04C Build.RADIO(deprecated): unknown Build.SERIAL: *************** Build.TAGS: release-keys Build.TIME(long): 1321492034000 Build.TYPE: user Build.USER: NCmobile Build.VERSION.CODENAME: REL Build.VERSION.INCREMENTAL: eng.20111117.100533 Build.VERSION.RELEASE: 2.3.3 Build.VERSION.SDK(deprecated): 10 Build.VERSION.SDK_INT(int): 10ドコモのN-04Cで実行した結果です。シリアル番号は伏字にしています。
N-04Cは元々Android 2.2でしたが、2.3.3にアップグレードしています。Android 2.3.3はAPI Level 10ですので、API Level 14で追加されたgetRadioVersion()は例外が発生して表示していません。
Build.TIMEは、1970年1月1日00:00:00GMTからのミリ秒ですので、
Log.d(TAG, "Build.TIME(long): " + Build.TIME);を
Date d = new Date(Build.TIME);に変更することで、日時に変換して表示できます。
Log.d(TAG, "Build.TIME: " + Build.TIME + " (" + d.toString() + ")");
なお、それぞれのフィールドの意味については、Android Developersのサイトをご覧ください。
http://developer.android.com/reference/android/os/Build.html
http://developer.android.com/reference/android/os/Build.VERSION.html
0 件のコメント:
コメントを投稿