如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?
Posted
技术标签:
【中文标题】如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?【英文标题】:How to get device (AOSP) Build Number in Android devices programmatically? 【发布时间】:2014-01-08 22:12:29 【问题描述】:在 android 应用程序中,如何以编程方式获取主机设备的内部版本号,如 系统设置 -> 关于平板电脑 -> 内部版本号 中所示,以便在 Java Android 应用程序中使用? p>
目前,我正在使用“android.os.Build”。
【问题讨论】:
为什么人们会在这个问题上投反对票?告诉我原因.. 这不是重复的问题。构建/版本不同。 @payeli 它不是重复的.. Amit kumar。我同意你的看法 是的 @CapDroid 请帮忙。 @payeli 我检查了所有问题.. 但他没有得到他想要的完美答案.. 不要问问题标题。 【参考方案1】:Log.i("TAG", "SERIAL: " + Build.SERIAL);
Log.i("TAG","MODEL: " + Build.MODEL);
Log.i("TAG","ID: " + Build.ID);
Log.i("TAG","Manufacture: " + Build.MANUFACTURER);
Log.i("TAG","brand: " + Build.BRAND);
Log.i("TAG","type: " + Build.TYPE);
Log.i("TAG","user: " + Build.USER);
Log.i("TAG","BASE: " + Build.VERSION_CODES.BASE);
Log.i("TAG","INCREMENTAL " + Build.VERSION.INCREMENTAL);
Log.i("TAG","SDK " + Build.VERSION.SDK);
Log.i("TAG","BOARD: " + Build.BOARD);
Log.i("TAG","BRAND " + Build.BRAND);
Log.i("TAG","HOST " + Build.HOST);
Log.i("TAG","FINGERPRINT: "+Build.FINGERPRINT);
Log.i("TAG","Version Code: " + Build.VERSION.RELEASE);
它会起作用的。
【讨论】:
你想推断什么?【参考方案2】:我使用String Build_Number = Build.DISPLAY;
来获取电话设置中显示的内部版本号
【讨论】:
【参考方案3】:使用 Build.DISPLAY 作为内部版本号
【讨论】:
【参考方案4】:要获取此值,请使用Build.DISPLAY。这是来自 Verizon Note 2 的示例(Android 4.4.2 上的 SCH-I605):KOT49H.I605VRUFND7
要求:API 3 或更高版本。
【讨论】:
【参考方案5】:若要仅获取设置中“关于设备”中显示的 Build Number 值,我们可以使用以下静态方法:
/**
* This method returns Build Number of the device from the OS Build fingerprint
* @return osBuildNumber - human entered name of the device
*/
public static String getOSBuildNumber()
String osBuildNumber = Build.FINGERPRINT; //"google/shamu/shamu:5.1.1/LMY48Y/2364368:user/release-keys”
final String forwardSlash = "/";
String osReleaseVersion = Build.VERSION.RELEASE + forwardSlash;
try
osBuildNumber = osBuildNumber.substring(osBuildNumber.indexOf(osReleaseVersion)); //"5.1.1/LMY48Y/2364368:user/release-keys”
osBuildNumber = osBuildNumber.replace(osReleaseVersion, ""); //"LMY48Y/2364368:user/release-keys”
osBuildNumber = osBuildNumber.substring(0, osBuildNumber.indexOf(forwardSlash)); //"LMY48Y"
catch (Exception e)
Log.e("getOSBuildNumber", "Exception while parsing - " + e.getMessage());
return osBuildNumber;
这只会返回内部版本号的确切值。请记住,Android SDK 不会这样做。在BUILD类中检查以下sn-p:
/** A string that uniquely identifies this build. Do not attempt to parse this value. */
public static final String FINGERPRINT = deriveFingerprint();
/**
* Some devices split the fingerprint components between multiple
* partitions, so we might derive the fingerprint at runtime.
*/
private static String deriveFingerprint()
String finger = SystemProperties.get("ro.build.fingerprint");
if (TextUtils.isEmpty(finger))
finger = getString("ro.product.brand") + '/' +
getString("ro.product.name") + '/' +
getString("ro.product.device") + ':' +
getString("ro.build.version.release") + '/' +
getString("ro.build.id") + '/' +
getString("ro.build.version.incremental") + ':' +
getString("ro.build.type") + '/' +
getString("ro.build.tags");
return finger;
上述方法只是对“deriveFingerprint()”方法中提供的数据进行逆向工程。
【讨论】:
【参考方案6】:检查此代码..
在Build.FINGERPRINT
中,您将获得设备的Build Number
。
String mString = "";
mString.concat("VERSION.RELEASE " + Build.VERSION.RELEASE + "");
mString.concat("\nVERSION.INCREMENTAL " + Build.VERSION.INCREMENTAL + "");
mString.concat("\nVERSION.SDK " + Build.VERSION.SDK + "");
mString.concat("\nBOARD " + Build.BOARD + "");
mString.concat("\nBRAND " + Build.BRAND + "");
mString.concat("\nDEVICE " + Build.DEVICE + "");
mString.concat("\nFINGERPRINT " + Build.FINGERPRINT + "");
mString.concat("\nHOST " + Build.HOST + "");
mString.concat("\nID " + Build.ID + "");
((TextView) findViewById(R.id.textView1)).setText(mString);
我的设备版本号:
FINGERPRINT
以上代码返回
【讨论】:
mString = mString.concat("VERSION.RELEASE " + Build.VERSION.RELEASE + ""); [...] 我也在尝试获取内部版本号,设置中显示的值与 Build.FINGERPRINT 完全不匹配 @takluiper 您正在检查哪个操作系统版本? @SilentKiller 我用两种不同的设备进行了测试,其中一个设备的值是正确的,但另一个设备的值根本不匹配。上一个的Android版本是4.4【参考方案7】:我希望它返回您想要的相同值..
String build_number = Build.FINGERPRINT;
System.out.println("Build Number" + build_number);
【讨论】:
Build.FINGERPRINT 不返回内部版本号 我得到 .. 你在哪个设备上测试?以上是关于如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?