Как получить кодовые имена платформы Android, такие как Honeycomb
В моем приложении я хочу показать кодовое имя ОС Android устройства. т.е. я хочу получить кодовые имена Android OS, такие как Honeycomb
или же Gingerbread
прагматично во время выполнения с устройства.
Есть ли способ получить это кодовое имя? Я хочу показать это имя на одном из экранов моего приложения.
Я могу сравнить, как это и жестко закодировать строку.
if (Build.VERSION.SDK_INT==Build.VERSION_CODES.GINGERBREAD) {
CodeName=”GINGERBREAD”
} else if (Build.VERSION.SDK_INT==Build.VERSION_CODES.HONEYCOMB){
CodeName=”Honeycom”
}
Но если завтра выйдет новая версия, то мне придется снова изменить код. Вот почему я ищу некоторые, почему бы получить саму строку кодового имени вместо получения номера версии.
Так может кто-нибудь предложить какой-нибудь способ получить кодовое имя ОС устройства, как мы получаем номер версии ОС?
6 ответов
В документации Android нет API для возврата строки кодового имени для вас. Вы можете получить только НОМЕР ВЕРСИИ, как 2.3, который вы можете показать пользователям.
Попробуй это.
enum Codenames
{
BASE, BASE_1,
CUPCAKE,
DONUT,
ECLAIR, ECLAIR_MR1, ECLAIR_MR2,
FROYO,
GINGERBREAD, GINGERBREAD_MR1,
HONEYCOMB, HONEYCOMB_MR1, HONEYCOMB_MR2,
ICE_CREAM_SANDWICH, ICE_CREAM_SANDWICH_MR1,
JELLY_BEAN;
public static Codenames getCodename()
{
int api = Build.VERSION.SDK_INT;
switch (api) {
case 1:
return BASE;
case 2:
return BASE_1;
case 3:
return CUPCAKE;
case 4:
return DONUT;
case 5:
return ECLAIR;
case 6:
return ECLAIR_MR1;
case 7:
return ECLAIR_MR2;
case 8:
return FROYO;
case 9:
return GINGERBREAD;
case 10:
return GINGERBREAD_MR1;
case 11:
return HONEYCOMB;
case 12:
return HONEYCOMB_MR1;
case 13:
return HONEYCOMB_MR2;
case 14:
return ICE_CREAM_SANDWICH;
case 15:
return ICE_CREAM_SANDWICH_MR1;
case 16:
return JELLY_BEAN;
default:
return null;
}
}
};
а затем сделать
Codenames c = Codenames.getCodename();
import java.lang.reflect.Field;
Field[] fields = Build.VERSION_CODES.class.getFields();
String osName = fields[Build.VERSION.SDK_INT + 1].getName();
Log.d("OsName",""+osName);
Почему бы не использовать отражение?
String versionCodename = null;
Field[] fields = Build.VERSION_CODES.class.getFields();
for (int i = 0; i < fields.length; i++) {
Field fld = fields[i];
try {
int val = fld.getInt(null);
if (val == Build.VERSION.SDK_INT && fld.getName().length() > 1) {
String fldName = fld.getName();
versionCodename = fldName.substring(0, 1).toUpperCase() + fldName.substring(1).toLowerCase();
break;
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Таким образом, просто измените .GINGERBREAD
на все, что вы хотите, т.е. .HONEYCOMB
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.GINGERBREAD) {
// do code for device before gingerbread
}
Также проверьте здесь для получения дополнительной информации - http://developer.android.com/reference/android/os/Build.VERSION.html
Изменить - чтобы получить номер версии как int, вы делаете
int versionNumber = Build.VERSION.SDK_INT;
И тогда вы можете использовать
if (versionNumber == 2.3){
//do code here
}