このようなアンドロイドバージョンを見つけるためのコードを書くAndroid:どのようにプログラムでアンドロイドのバージョン名を見つけるのですか?
String version = Build.VERSION.RELEASE;
このコードを使用すると、バージョン番号を取得できますが、バージョン名が必要です。どのバージョン名を取得する ???/
このようなアンドロイドバージョンを見つけるためのコードを書くAndroid:どのようにプログラムでアンドロイドのバージョン名を見つけるのですか?
String version = Build.VERSION.RELEASE;
このコードを使用すると、バージョン番号を取得できますが、バージョン名が必要です。どのバージョン名を取得する ???/
前述のように、反射はこの質問の鍵であるようです。 StringBuilderと追加の書式設定は必須ではなく、使い方を説明するためだけに追加されています。私の4.1エミュレータで
import java.lang.reflect.Field;
...
StringBuilder builder = new StringBuilder();
builder.append("android : ").append(Build.VERSION.RELEASE);
Field[] fields = Build.VERSION_CODES.class.getFields();
for (Field field : fields) {
String fieldName = field.getName();
int fieldValue = -1;
try {
fieldValue = field.getInt(new Object());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
if (fieldValue == Build.VERSION.SDK_INT) {
builder.append(" : ").append(fieldName).append(" : ");
builder.append("sdk=").append(fieldValue);
}
}
Log.d(LOG_TAG, "OS: " + builder.toString());
、私はこの出力を得る:
D/MainActivity(1551): OS: android : 4.1.1 : JELLY_BEAN : sdk=16
をお楽しみください!
あなたは
詳しい情報はこちらのリンクからあったことができ、これらの
android.os.Build.VERSION_CODES
android.os.Build.VERSION.SDK_INT
から情報を取得します:
Retrieving Android API version programmatically
・ホープ、この意志を助けます。
http://developer.android.com/reference/android/os/Build.VERSION_CODES.htmlには、探している名前のフィールドが含まれています。 したがって、reflexionを使用して、 "version"値に対応するフィールドを見つけることができます。
なぜ名前が必要ですか?
チェックこのアウト:
// Names taken from android.os.build.VERSION_CODES
String[] mapper = new String[] {
"ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT",
"ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO", "GINGERBREAD",
"GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1", "HONEYCOMB_MR2",
"ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN"
};
int index = Build.VERSION.SDK_INT - 1;
String versionName = index < mapper.length? mapper[index] : "UNKNOWN_VERSION"; // > JELLY_BEAN)
は、このソリューションはまでしかならば(バージョンコードは1つインクリメントされ続けると、あなたはそれぞれの新しいアンドロイドバージョンでリストを更新する必要がありますように動作することに注意してください正確であることが重要です)。電話が動作しているアンドロイドドキュメント、SDKレベル(整数)で説明したように
だから、あなたはこのアレイを更新する必要があります、すべての新しいAndroidのバージョンは、弱い。 –
はで利用可能である:
android.os.Build.VERSION.SDK_INT。
このintに対応する列挙型は、android.os.Build.VERSION_CODESクラスにあります。
コード例:
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.FROYO){
// Do something for froyo and above versions
} else{
// do something for phones running an SDK before froyo
}
編集:これSDK_INTはドーナッツ(アンドロイド1.6/API4)以降で使用可能ですので、あなたはそれを使用する場合、アプリケーションがカップケーキ(アンドロイド1.5/API3)とレトロ互換性がありませんことを確認してくださいまたはあなたのアプリケーションがクラッシュすることがあります(プログラマブルースの精度のおかげで)。
最適化されたコードは、これは動作します:
import java.lang.reflect.Field;
Field[] fields = Build.VERSION_CODES.class.getFields();
String osName = fields[Build.VERSION.SDK_INT + 1].getName();
Log.d("Android OsName:",osName);
import java.lang.reflect.Field; Field[] fields = Build.VERSION_CODES.class.getFields(); String osName = fields[Build.VERSION.SDK_INT + 1].getName();
このコードは動作します。次に、必要に応じてosName変数を使用します。
次の機能を試すことができます。
public String AndroidOSName() {
String os = Build.VERSION.SDK;
System.out.println("here is my os" + " " + os);
if (os.equals("23")) {
return "Marshmallow";
} else if (os.equals("21")) {
return "Lollipop";
} else if (os.equals("22")) {
return "LOLLIPOP_MR1";
} else if (os.equals("20")) {
return "KitKat";
} else if (os.equals("19")) {
return "KitKat";
} else if (os.equals("18")) {
return "Jelly Bean";
} else if (os.equals("17")) {
return "Jelly Bean";
} else if (os.equals("16")) {
return "Jelly Bean";
} else if (os.equals("15")) {
return "Ice Cream Sandwich";
} else if (os.equals("14")) {
return "Ice Cream Sandwich";
} else if (os.equals("13")) {
return "Honeycomb";
} else if (os.equals("12")) {
return "Honeycomb";
} else if (os.equals("11")) {
return "Honeycomb";
} else if (os.equals("10")) {
return "Gingerbread";
} else if (os.equals("9")) {
return "Froyo";
} else if (os.equals("8")) {
return "Froyo";
} else {
return "Not Found";
}
}
あなた自身のウェブサイトやブログを宣伝したい場合は注意してください。**あなたは答えにあなたの所属を開示する必要があります**。さもなければ、あなたの答えは迷惑メールとして警告されるかもしれません。 [スパマーにならない方法](https://stackoverflow.com/help/promotion)をお読みください。 – iBug
私はAPIに19
を実行しているエミュレータで試してみましたときに反射が働いていないので、私は「ナチョ・コロマ」と「ケビン・グラント」のハイブリッド答えを思い付く
String osName="";
Field[] fields = Build.VERSION_CODES.class.getFields();
for (Field field : fields) {
String fieldName = field.getName();
int fieldValue = -1;
try {
fieldValue = field.getInt(new Object());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
if (fieldValue == Build.VERSION.SDK_INT) {
osName=fieldName; break;
}
}
if(osName.isEmpty()) {
String[] mapper = new String[]{
"ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT",
"ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO",
"GINGERBREAD", "GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1",
"HONEYCOMB_MR2", "ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN",
"JELLY_BEAN", "JELLY_BEAN", "KITKAT", "KITKAT",
"LOLLIPOOP", "LOLLIPOOP_MR1", "MARSHMALLOW", "NOUGAT",
"NOUGAT", "OREO", "OREO", "ANDROID P"};
int index = Build.VERSION.SDK_INT - 1;
osName = index < mapper.length ? mapper[index] : "UNKNOWN_VERSION";
}
名前の独自の静的配列を使用して索引で検索する方が簡単で安全です。 – CommonsWare
静的配列は、すべてのリリースで定期的に更新できるアプリには理想的ですが、Androidの多くのリリースで更新されないプロジェクトでは、依然として推奨される解決策です。 –